
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 sencilla 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 la instalación.
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 utiliza el sistema de gestor de certificados de wolfSSL
para X.509, incluidas las consultas OCSP. Para permitir OCSP, añada --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 el capítulo dos del manual de wolfSSH.
Desde el directorio de fuentes 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 ha ejecutado o está usando código de un
archivo de fuentes, debe omitirlo.
Para compilar en Windows con Visual Studio, consulte el archivo "ide/winvs/README.md".
NOTA: En dispositivos con recursos limitados, puede ser necesario establecer DEFAULT_WINDOW_SZ
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 cómo establecer 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 añadir compatibilidad con 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, introduzca "upthehill". El servidor enviará un banner predefinido al cliente:
wolfSSH Example Echo Server
Los caracteres escritos en el cliente serán devueltos a la pantalla por el servidor. Si los caracteres se devuelven dos veces, el cliente tiene el eco local habilitado. El echoserver no actúa como un terminal adecuado, 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 una clave pública. Para usar una contraseña, la línea de comandos:
$ ssh -p 22222 USER@localhost
Donde los pares 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.
Ten 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. Puedes añadir tu propio nombre de usuario a la lista de contraseñas o de claves públicas en el echoserver. Esa cuenta iniciará sesión en un shell lanzado por el echoserver con los privilegios del usuario que ejecuta echoserver.
wolfSSH se distribuye con algunas herramientas de ejemplo con fines de prueba y para demostrar la interoperabilidad con otras implementaciones de SSH.
El echoserver es la pieza central de wolfSSH. Originalmente solo permitía autenticarse con una de las cuentas predefinidas y repetía los caracteres escritos en él. Al habilitar el soporte de shell, puede lanzar 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 gestionar conexiones SCP y SFTP.
La herramienta echoserver acepta las siguientes opciones de línea de comandos:
-1 salir tras una única conexión
-e esperar clave pública ECC del cliente
-E usar clave privada ECC
-f hacer 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 (OBLIGATORIO)
-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 tras 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 el reenvío de puertos local o solicita un listener para el reenvío de puertos remoto. Tras 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 (OBLIGATORIO)
-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 (OBLIGATORIO)
-T <host> host al que reenviar, por defecto el host
-t <num> puerto al que reenviar (OBLIGATORIO)