FORGOT YOUR DETAILS?

CREATE ACCOUNT

Unison Help

  1. Unison Kernel
    1. Pthreads
      1. pthread_create()
      2. pthread_exit()
      3. pthread_self()
      4. pthread_equal()
      5. pthread_join()
      6. pthread_detach()
      7. pthread_setschedparam()
      8. pthread_getschedparam()
      9. pthread_attr_init()
      10. pthread_attr_destroy()
      11. pthread_attr_setstackaddr()
      12. pthread_attr_getstackaddr()
      13. pthread_attr_setstacksize()
      14. pthread_attr_getstacksize()
      15. pthread_attr_setschedparam()
      16. pthread_attr_getschedparam()
      17. pthread_attr_setdetachstate()
      18. pthread_attr_getdetachstate()
      19. pthread_stackinfo()
      20. pthread_setprio()
      21. pthread_getprio()
      22. sched_get_priority_max()
      23. sched_get_priority_min()
      24. sched_yield()
    2. Pthread Cancellation
      1. pthread_cleanup_pop()
      2. pthread_cleanup_push()
      3. pthread_cancel()
      4. pthread_setcanceltype()
      5. pthread_setcancelstate()
      6. pthread_testcancel()
    3. Mutex
      1. pthread_mutex_init()
      2. pthread_mutex_destroy()
      3. pthread_mutex_lock()
      4. pthread_mutex_trylock()
      5. pthread_mutex_unlock()
    4. Semaphores
      1. sem_open()
      2. sem_close()
      3. sem_unlink()
      4. sem_init()
      5. sem_destroy()
      6. sem_wait()
      7. sem_trywait()
      8. sem_timedwait()
      9. sem_post()
      10. sem_getvalue()
    5. Message Queues
      1. mq_open()
      2. mq_close()
      3. mq_unlink()
      4. mq_send()
      5. mq_receive()
      6. mq_notify()
      7. mq_setattr()
      8. mq_getattr()
      9. mq_timedreceive()
      10. mq_timedsend()
    6. Conditional Variables
      1. pthread_cond_init()
      2. pthread_cond_destroy()
      3. pthread_cond_wait()
      4. pthread_cond_timedwait()
      5. pthread_cond_signal()
      6. pthread_cond_broadcast()
      7. pthread_condattr_init()
      8. pthread_condattr_destroy()
    7. Barriers
      1. pthread_barrier_init()
      2. pthread_barrier_destroy()
      3. pthread_barrier_wait()
    8. Timers
      1. timer_create()
      2. timer_delete()
      3. timer_settime()
      4. timer_gettime()
      5. timer_getoverrun()
      6. timer_tick()
      7. nanosleep()
    9. Clocks
      1. time()
      2. uptime()
      3. sleep()
      4. clock_settime()
      5. clock_gettime()
      6. clock_getres()
      7. clock_init()
    10. Memory Allocation
      1. POSIX.1
        1. malloc()
        2. free()
      2. Variable Length (Pools)
        1. pool_create()
        2. pool_destroy()
        3. pool_alloc()
        4. pool_free()
      3. Fixed Length (Partitions)
        1. pt_create()
        2. pt_destroy()
        3. pt_getblock()
        4. pt_freeblock()
    11. Rendezvous
      1. mr_init()
      2. mr_send()
      3. mr_receive()
      4. mr_reply()
      5. mr_sigrecv()
      6. mr_sigpost()
    12. Interrupts
      1. interrupts
      2. i_disable()
      3. i_restore()
    13. Directory Services
      1. dir_register()
      2. dir_deregister()
      3. dir_lookup()
      4. dir_lookup_string()
    14. Miscellaneous
      1. checkIstack()
      2. NanoStart() or DSPexec_Start()
      3. _isrStackFill
      4. Kernel Scaling
      5. kfatal()
      6. kalloc()
      7. kfree()
      8. mpu or mmu
      9. pthreadStackFill
      10. thread_numb()
      11. thread_utilization_start()
      12. thread_utilization_stop()
      13. xprintf()
      14. xputs()
      15. xputchar()
  2. Unison I/O Library
    1. accept()
    2. bind()
    3. chmod()
    4. close()
    5. connect()
    6. creat()
    7. fstat()
    8. getpeername()
    9. getsockname()
    10. getsockopt()
    11. ioctl()
    12. link()
    13. listen()
    14. lseek()
    15. mkdir()
    16. mkfs()
    17. mount()
    18. open()
    19. read()
    20. recv()
    21. recvfrom()
    22. rename()
    23. renameat()
    24. rmdir()
    25. select()
    26. send()
    27. sendto()
    28. setsockopt()
    29. shutdown()
    30. socket()
    31. stat()
    32. sync()
    33. umount()
    34. unlink()
    35. write()
  3. Unison STDIO Library
    1. STDIO Library Calls
      1. clearerr()
      2. dprintf()
      3. fclose()
      4. fdopen()
      5. feof()
      6. ferror()
      7. fileno()
      8. fflush()
      9. fgetc()
      10. fgetpos()
      11. fgets()
      12. fopen()
      13. fprintf()
      14. fputc()
      15. fputs()
      16. fread()
      17. freopen()
      18. fscanf()
      19. fseek()
      20. fseeko()
      21. fsetpos()
      22. ftell()
      23. ftello()
      24. fwrite()
      25. getc()
      26. getc_unlocked()
      27. getchar()
      28. getchar_unlocked()
      29. getdelim()
      30. getline()
      31. gets()
      32. get_stderr_ptr()
      33. get_stdin_ptr()
      34. get_stdout_ptr()
      35. noperprintf()
      36. perprintf()
      37. perror()
      38. posix_compat()
      39. printf()
      40. putc()
      41. putc_unlocked()
      42. putchar()
      43. putchar_unlocked()
      44. puts()
      45. remove()
      46. rewind()
      47. scanf()
      48. setbuf()
      49. setvbuf()
      50. snprintf()
      51. sprintf()
      52. sscanf()
      53. stderr_init()
      54. stderr_close()
      55. stdin_init()
      56. stdin_close()
      57. stdout_init()
      58. stdout_close()
      59. vdprintf()
      60. vscanf()
      61. vsscanf()
      62. vfscanf()
      63. vprintf()
      64. vsnprintf()
      65. vsprintf()
      66. vfprintf()
      67. ungetc()
    2. Do-nothing Stubs
      1. ctermid()
      2. flockfile()
      3. fmemopen()
      4. ftrylockfile()
      5. open_memstream()
      6. pclose()
      7. popen()
      8. tempnam()
      9. tmpfile()
      10. tmpnam()
  4. Unison LIBC Library
    1. LIBC Library Calls
      1. assert()
      2. realloc()
      3. strcasecmp()
      4. strdup()
      5. strncasecmp()
      6. strftime()
    2. Do-nothing Stubs
      1. abort()
      2. execve()
      3. exit()
      4. _Exit()
      5. fork()
      6. getpid()
      7. isatty()
      8. kill()
      9. sbrk()
      10. times()
      11. wait()
    3. Do-nothing Wide-character Stubs
      1. <wchar.h>
      2. <wctype.h>
  5. Unison I/O Servers
    1. File Servers
      1. Multimedia File Server - fsys
      2. FAT File System - fatfs
      3. NAND File Server - nandfsys
      4. NOR File Server - norfsys
      5. Network File Server - nfs
  6. Graphics, Camera, Video, Audio
    1. Vendor Graphics
    2. Prism++ Graphics
    3. ADPCM Services - adpcmd
    4. Camera
  7. Network Protocols
    1. TCP and UDP Server - tcpd
      1. IPv4 only server
      2. IPv4/IPv6 server
    2. DHCP Client Service - dhcp client
    3. DHCP Server - dhcpd
    4. Telnet Server - telnetd
    5. Tiny FTP Server - tftpd
    6. Point to Point - pppd
    7. Network Translation - NAT with PAT
    8. Firewall
      1. Packet filter: pf
      2. Packet filter control: pfctl
      3. Fitler rules: pf.filtering
      4. Translation rules: pf.nat
    9. Tiny HTTP Server - thttpd
    10. Tiny HTTP Server with TLS
    11. POP3 Server
    12. Simple Mail Transfer Protocol Services (SMTP)
    13. Bootp Protocol
    14. File Transfer Protocol Server (FTP)
    15. File Transfer Client Services
    16. RPC / XDR
    17. DNS Client
    18. HTTP/HTTPS Client
    19. REST Client
    20. AutoIP Service - autoip client
    21. mDNS server - mdnsd
    22. SNTP Client
    23. SNMP Agent - Snmpd server
    24. SSL/TLS library
    25. SSH server
    26. IP security
      1. IPsec description
      2. IPsec administration: ipsecadm
      3. Virtual Private Network: VPN
    27. Power Control
      1. Motor and Motion Control Servers
      2. PWM, Encoders
    28. Serial I/O
      1. Asynchronous Serial I/O Server - ttyserver
      2. CAN Server - cand
      3. I2C Server - i2cd
      4. I2S Server - i2sd
    29. System Services
      1. Power Management Servers
      2. Login Service - login_services
      3. XML
      4. POSIX Shell and Login Service - posh
    30. Universal Serial Bus (USB)
      1. USB Server
      2. USB Device Server
      3. USB Embedded Host Server
    31. Wireless
      1. Wireless Servers and Drivers
      2. 802.15.4 Radio Servers
      3. TCP/v6 with 6loWPAN
      4. ZigBee
      5. BlueTooth Server
      6. 802.11 Wi-Fi
      7. GPRS, UHF and GPS Radio Servers
    32. Remedy Tools for Unison
      1. Remedy Data Logging and Event Display Tools
      2. Remedy Diagnostics
      3. Remedy Flash Downloader/Bootloader
      4. Remedy Power On Self Test - POST
      5. Remedy OS Object Viewer
      6. Remedy Remote Control Tools

7.25. SSH server #

NAME

SSH Server – sshd

SYNOPSIS

#include <posh_init.h>
#include <login.h>
#include <ssh.h>
#include <sys.h>

sshd(SSH_CONFIG_FILE, &shell_init);

 

DESCRIPTION

The SSH server provides a network ssh protocol and utilizes the vtty server technology and the posh shell server for user interaction via ssh client. Typically, when initialized, it allows users to query files, examine the file structure, create new files and look at the content of files, all over the network. It is a minimal implementation for memory reasons. It does not support terminal formating of any kind and only supports the absolute minimal set of commands.

The SSH server uses public-key cryptography to authenticate the remote computer and allow it to authenticate the user, if necessary. There are several ways to use SSH; one is to use automatically generated public-private key pairs to simply encrypt a network connection, and then use password authentication to log on. Another is to use a manually generated public-private key pair to perform the authentication, allowing users or programs to log in without having to specify a password.

SSH server allows Privete/Public Key or Password Authentication. Authentication automatic selects on connection procedure. SSH server support AES128 and 3-DES encription and SHA-1 cryptographic hash function.

SSH server support IPv4 and IPv6 protocols

For reduce memory usage SSH can suport only one POSH session.

 

SSH server sturtup function (sshd) have 2 parameters:

void sshd(char *config_path, tshell_init * shell);

 

config_path – string constatn defines path to configuration file. Structure of this file described below

shell – pointers to comfiguration functiond for POSH and/or SFTP sever. At least one funstion must be defined

SSH CONFIGURATION FILE STRUCTURE

Option Default Description
ipv4 22 Iincoming port for IPv4 protocol. If defined -1 – protocol unsupported
ipv6 -1 Incoming port for IPv4 protocol. If defined -1 – protocol unsupported
keyfile —- Path for host key file. Support DSS an RSA format

Can be specified several times for different files

rcv_window 4096 Recive window size
keepalivee_timeout 0 (forewer) Max wait time (sec) while session can be openned. After this time connection will be closed
idle_timeout 0 (forewer) Max wait time (sec) while session can be openned without data transfer. After this time connection will be closed
loginfile “/dev/fd/ssh/ssh_loginfile” Path for file with logins
authkeys_file “/dev/fd/ssh/authorized_keys” Path for file with keys
posh_ena 1 Enabel posh connection
sftp_ena 0 Enabel SFTP connection

SSH CONFIGURATION FILE EXAMPLE

char * config_file_str =
						"ipv4:22\n\r"	\
						"ipv6:22\n\r"	\
						"keepalivee_timeout:1000\n\r"	\
						"rcv_window:1024\n\r"	\
						"keyfile:/dev/rd/d1/id_rsa\n\r"	\
						"loginfile:/dev/rd/d1/ssh_users\n\r"\
						"authkeys_file:/dev/rd/d1//dev/rd/d1/id_rsa\n\r" \
						"posh:1\n\r";

keyfile: path for private server host key file; This filecan be generated by “hostkeygen” utility under Linux.

hostkeygen-t rsa -f hostkey

loginfile: path for login file;
authkeys_file: path for public keys file. This file has public keys separated by ne line (one key per line);

All public keys have OpenSSH format like this:

(the text is all one, without linebreaks):

ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAIEAmihVmFR3GH8V0BmN0uexjxmCMenVrYUQ8OKYUntz
7knmxE1Wzxy1ZF6unK36GXJAxEekK1WdSXXEEB50FLcVgbfQRoTo3RBVEP2acXyvTM5R3n5GRhXl
tEUVlkK5vL98f2xpQK5cqmu9+jFz/z/BdXycORb5cO6m28TDLRD+9Fk= rsa-key-20050927

SSH initialization structure

typedef struct {
	int (*posh_start)(void *);
	int (*sftp_start)(void *);
} tshell_init;

Posh initialization structure.

struct set_posh
{
    char *stdinstring;          // set the input stream
    char *stdoutstring;         // set output stream
    char *mountpoint;           // set first file mount point
    char *mountpoint2;          // set second file mount point
    char *loginfile;
};

This partial example shows the creation and registration of the SSH server and its associated vtty file I/O. After creation, posh is created which interacts via the vtty file I/O ports for input and output.

int start_posh(void * arg);

THREAD ssh_shell(void *arg)
{
	tshell_init shell_init;
	shell_init.posh_start = start_posh;
	shell_init.sftp_start = NULL;

	sshd(SSH_CONFIG_FILE, &shell_init);
	return 0; //just to avoid warning
}


...

int start_posh(void)
{
	struct set_posh *set_posh_tty;
	pthread_t poshTid;
	pthread_attr_t poshattr;
	struct sched_param poshPriority;

	if( (set_posh_tty = malloc(sizeof(struct set_posh)))==NULL)
	{
	    xprintf("posh create - no memory\n");
	    return -1;
	}
	set_posh_tty->stdinstring = "/dev/sshtty0";
	set_posh_tty->stdoutstring = "/dev/sshtty0";
	set_posh_tty->mountpoint = FSYS_MOUNT;
	set_posh_tty->mountpoint2 = NULL;
	set_posh_tty->loginfile = SSH_LOGIN_FILE;
	set_posh_tty->flags = POSH_LOGIN_DIS | VTTY_CONNECTION;

	pthread_attr_init(&poshattr);
	pthread_attr_setstacksize(&poshattr, 1400);
	poshPriority.sched_priority = 5;
	pthread_attr_setdetachstate(&poshattr, PTHREAD_CREATE_DETACHED);
	pthread_attr_setschedparam(&poshattr, &poshPriority);

	pthread_create(&poshTid, &poshattr, (void *(*)(void*))posh, set_posh_tty);

	pthread_attr_destroy(&poshattr);
	return 0;

/*
 * Start ssh example
 */
  ...
pthread_attr_init(&attr);
	myNewPriority.sched_priority = 6;
	pthread_attr_setschedparam(&attr, &myNewPriority);
 	pthread_attr_setstacksize(&attr, 8196);

	if(pthread_create(&pid, &attr, &ssh_shell, 0)!=0)
	{
		xprintf("pthread_create = %d\n", errno);
#if RTOS_DEBUG
		dir_deregister("Main thread");
#endif
		pthread_exit(0);
	}
	pthread_attr_destroy(&attr);

  ...

 

SSH – POSH COMMANDS AND OPTIONS

  • help – help listing
  • alias [alias_name=”value”] – setup an alias for an expression
  • cat – concatenate output
  • cd <dir> – change directory to <dir>
  • chmod <mode> <dir | file> – change a file’s access control mode

    mode – file access mode, for example “rwx”

    dir | file – path to the target file to which mode is setting

  • cp <src> <dst> – copy a file from <src> path to <dst> path
  • exit – exit the posh shell
  • ln <src> <dst> – create link to file

    src – target path for link

    dst – link name (with path)

  • logout – logout of posh
  • ls [option] – list directory contents

    -l – for long list

    -d – lists directories, not content

  • mkdir <dir> – make a directory specified by <dir>
  • mv <src> <dst> – move a file from <src> path to <dst> path
  • printenv [env_name] – print all or part of environment

    printenv [VARIABLE] or printenv OPTION

    If VARIABLE or OPTION not specified, then all present will be printed

  • pwd – present working directory
  • rm <file> – remove a file
  • rmdir – remove a directory
  • setenv [env_name=”value”] – set an environment variable

    Example: setenv PATH “/d0:/sd/d1:/sd/d1/d2”

  • unalias <alias_name> – delete an alias
  • useradd <username> <password> – add a user with a password
  • userdel <username> – delete a user
  • userpasswd <username> <oldpassword> <newpassword> – set (or reset) a user password

 

NOTES

There is a demo available for the Unison and DSPnano SSH server which is found in installdir/demos.

 

SEE ALSO

posh, login, sftp

Suggest Edit

CONTACT US

TO GET YOUR PROJECT STARTED

TOP