
Pequeña biblioteca cliente y servidor SSHv2 embebible y portátil en C con SCP, SFTP, reenvío de puertos e intercambio de claves post-cuántico para sistemas embebidos e IoT.
Servidor SSH embebible de wolfSSL Manual de wolfSSH
wolfSSH depende de wolfCrypt, que se encuentra como parte de wolfSSL. La siguiente es la configuración más simple de wolfSSL para habilitar wolfSSH.
$ cd wolfssl
$ ./configure [OPTIONS] --enable-ssh
$ make check
$ sudo make install
En algunos sistemas se necesita el comando opcional ldconfig después de instalar.
Para usar la función de generación de claves en wolfSSH, wolfSSL deberá estar
configurado con keygen: --enable-keygen.
Cuando se usan certificados X.509 para la autenticación de usuarios, wolfSSL debe
compilarse con TLS habilitado. wolfSSH usa el sistema de gestor de certificados de
wolfSSL para X.509, incluidas las consultas OCSP. Para permitir OCSP, agregue
--enable-ocsp a la configuración de wolfSSL.
Si no se desea la mayor parte del código de wolfSSL, wolfSSL puede configurarse con
la opción de solo criptografía: --enable-cryptonly.
Las opciones de compilación adicionales para wolfSSL se encuentran en capítulo dos del manual de wolfSSH.
Desde el directorio de código fuente de wolfSSH ejecute:
$ ./autogen.sh (si se clonó desde GitHub)
$ ./configure --with-wolfssl=[/usr/local]
$ make
$ make check
El script autogen.sh solo debe ejecutarse la primera vez después de clonar
el repositorio. Si ya lo ejecutó o está usando código de un
archivo fuente, debe omitirlo.
Para compilar en Windows con Visual Studio, consulte el archivo "ide/winvs/README.md".
NOTA: En dispositivos con recursos limitados, DEFAULT_WINDOW_SZ puede necesitar
establecerse en un tamaño menor. También puede aumentarse en casos de uso de escritorio
para ayudar con transferencias de archivos grandes. Por defecto, los canales se configuran para recibir
hasta 128kB de datos antes de enviar un mensaje de ajuste de ventana de canal. Un
ejemplo de configuración de un tamaño de ventana para nuevos canales sería el siguiente
./configure CPPFLAGS="-DDEFAULT_WINDOW_SZ=16384"
Para plataformas Linux de 32 bits, puede agregar soporte para archivos > 2GB compilando
con CFLAGS=-D_FILE_OFFSET_BITS=64.
El directorio examples contiene un echoserver al que cualquier cliente debería
poder conectarse. Desde la terminal ejecute:
$ ./examples/echoserver/echoserver -f
La opción -f habilita el modo de solo eco. Desde otra terminal ejecute:
$ ssh jill@localhost -p 22222
Cuando se solicite una contraseña, ingrese "upthehill". El servidor enviará un banner predefinido al cliente:
wolfSSH Example Echo Server
Los caracteres escritos en el cliente serán repetidos en pantalla por el servidor. Si los caracteres se repiten dos veces, el cliente tiene el eco local habilitado. El echoserver no es una terminal adecuada, por lo que la traducción CR/LF no funcionará como se espera.
Los siguientes caracteres de control activarán acciones especiales en el echoserver:
Después de clonar el repositorio, asegúrese de hacer que las claves privadas de prueba
sean de solo lectura para el usuario, de lo contrario ssh le indicará que lo haga.
$ chmod 0600 ./keys/gretel-key-rsa.pem ./keys/hansel-key-rsa.pem \
./keys/gretel-key-ecc.pem ./keys/hansel-key-ecc.pem
La autenticación contra el echoserver de ejemplo puede realizarse con una contraseña o clave pública. Para usar una contraseña, la línea de comandos:
$ ssh -p 22222 USER@localhost
Donde los pares de USER y contraseña son:
jill:upthehill
jack:fetchapail
Para usar autenticación con clave pública, use la línea de comandos:
$ ssh -i ./keys/USER-key-TYPE.pem -p 22222 USER@localhost
Donde USER puede ser gretel o hansel, y TYPE es rsa o
ecc.
Tenga en cuenta que el echoserver tiene varias cuentas falsas en su
función de callback wsUserAuth(). (jack, jill, hansel y gretel) Cuando
el soporte de shell está habilitado, esas cuentas falsas no funcionarán. No
existen en el archivo passwd del sistema. Los usuarios se autenticarán,
pero el servidor dará error porque no existen en el sistema. Puede
agregar su propio nombre de usuario a la lista de contraseñas o claves públicas en el
echoserver. Esa cuenta iniciará sesión en un shell iniciado por el
echoserver con los privilegios del usuario que ejecuta echoserver.
wolfSSH viene empaquetado con algunas herramientas de ejemplo con fines de prueba y para demostrar la interoperabilidad con otras implementaciones de SSH.
El echoserver es la herramienta principal de wolfSSH. Originalmente solo permitía autenticar una de las cuentas predefinidas y repetía los caracteres escritos en él. Al habilitar el soporte de shell, puede generar un shell de usuario. Necesitará un nombre de usuario real en la máquina y una función de callback de autenticación de usuario actualizada para validar las credenciales. El echoserver también puede manejar conexiones SCP y SFTP.
La herramienta echoserver acepta las siguientes opciones de línea de comandos:
-1 salir después de una única (una) conexión
-e esperar clave pública ECC del cliente
-E usar clave privada ECC
-f eco de la entrada
-p <num> puerto en el que aceptar, por defecto 22222
-N usar sockets no bloqueantes
-d <string> establecer el directorio home para conexiones SFTP
-j <file> cargar una clave pública para aceptar del par
El cliente establece una conexión con un servidor SSH. En su modo más simple, envía la cadena "Hello, wolfSSH!" al servidor, imprime la respuesta y luego sale. Con la opción de pseudo terminal, el cliente será un cliente real.
La herramienta client acepta las siguientes opciones de línea de comandos:
-h <host> host al que conectarse, por defecto 127.0.0.1
-p <num> puerto en el que conectarse, por defecto 22222
-u <username> nombre de usuario con el que autenticarse (REQUERIDO)
-P <password> contraseña para el nombre de usuario, se solicita si se omite
-e usar clave ecc de ejemplo para el usuario
-i <filename> nombre de archivo para la clave privada del usuario
-j <filename> nombre de archivo para la clave pública del usuario
-x salir después de una conexión exitosa sin realizar
lectura/escritura
-N usar sockets no bloqueantes
-t usar pseudo terminal
-c <command> ejecuta un comando remoto y redirige stdin/stdout
-a Intentar usar SSH-AGENT
La herramienta portfwd establece una conexión con un servidor SSH y configura un listener para reenvío de puertos local o solicita un listener para reenvío de puertos remoto. Después de una conexión, la herramienta termina.
La herramienta portfwd acepta las siguientes opciones de línea de comandos:
-h <host> host al que conectarse, por defecto 127.0.0.1
-p <num> puerto en el que conectarse, por defecto 22222
-u <username> nombre de usuario con el que autenticarse (REQUERIDO)
-P <password> contraseña para el nombre de usuario, se solicita si se omite
-F <host> host desde el que reenviar, por defecto 0.0.0.0
-f <num> puerto del host desde el que reenviar (REQUERIDO)
-T <host> host al que reenviar, por defecto el host
-t <num> puerto al que reenviar (REQUERIDO)