Manual de Wolfssh de Wolfssl's Incrustable SSH 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 ldconfig opcional después de instalar.
Para usar la función de generación de claves en Wolfssh, WolfSSL deberá configurarse con keygen: --enable-keygen .
Cuando se usa certificados X.509 para la autenticación del usuario, WolfSSL debe construirse con TLS habilitado. Wolfssh utiliza el sistema de administrador de certificados de Wolfssl para X.509, incluidas las búsquedas OCSP. Para permitir OCSP, Agregar --enable-ocsp a WolfSSL Configure.
Si no se desea la mayor parte del código WolfSSL, WolfSSL se puede configurar con la opción de Crypto Only: --enable-cryptonly .
Opciones de construcción adicionales para Wolfssl se encuentran en el capítulo dos. del manual de Wolfssh.
Desde el directorio fuente de Wolfssh Run:
$ ./autogen.sh
$ ./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á utilizando el código desde un archivo de origen, debe omitirlo.
Para construir debajo de Windows con Visual Studio, consulte el archivo "IDE/WinVS/Readme.md".
Nota: En los dispositivos restringidos de recursos, es posible que deba establecer el DEFAULT_WINDOW_SZ en un tamaño más bajo. También se puede aumentar en los casos de uso de escritorio para ayudar con transferencias de archivos grandes. Por defecto, los canales se establecen para recibir hasta 128 kb de datos antes de enviar un mensaje de ajuste de la ventana del canal. Un ejemplo de establecer un tamaño de ventana para nuevos canales sería el siguiente ./configure CPPFLAGS="-DDEFAULT_WINDOW_SZ=16384"
Para las plataformas Linux de 32 bits, puede agregar soporte para archivos> 2GB comparando con CFLAGS=-D_FILE_OFFSET_BITS=64 .
Los examples de directorio contienen un EchoServer al que cualquier cliente debería poder conectarse. Desde la ejecución de la terminal:
$ ./examples/echoserver/echoserver -f
La opción -f habilita el modo solo eco. De otra ejecución de la terminal:
$ ssh jill@localhost -p 22222
Cuando se le solicite una contraseña, ingrese "UpThehill". El servidor enviará un banner enlatado al cliente:
wolfSSH Example Echo Server
El servidor se desarrollará a los caracteres escritos en el cliente a la pantalla. Si los personajes se hacen eco dos veces, el cliente tiene un eco local habilitado. El Echoserver no es un terminal adecuado, por lo que la traducción CR/LF no funcionará como se esperaba.
Los siguientes caracteres de control desencadenarán acciones especiales en Echoserver:
Después de clonar el repositorio, asegúrese de hacer que las claves privadas de prueba sean solo para el usuario; de lo contrario, ssh le dirá 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 ejemplo Echoserver se puede hacer con una contraseña o clave pública. Para usar una contraseña, la línea de comando:
$ ssh -p 22222 USER@localhost
Donde están los pares de usuarios y contraseñas:
jill:upthehill
jack:fetchapail
Para usar la autenticación de la clave pública, use la línea de comando:
$ ssh -i ./keys/USER-key-TYPE.pem -p 22222 USER@localhost
Donde el usuario puede ser gretel o hansel , y el tipo es rsa o ecc .
Tenga en cuenta que el Echoserver tiene varias cuentas falsas en su función de devolución de llamada 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 se equivocará porque no existen en el sistema. Puede agregar su propio nombre de usuario a la contraseña o la lista de claves públicas en Echoserver. Esa cuenta será registrada en un shell iniciado por el Echoserver con los privilegios del usuario que ejecuta Echoserver.
Wolfssh viene empaquetado con algunas herramientas de ejemplo para fines de prueba y para demostrar la interoperabilidad con otras implementaciones de SSH.
El EchoServer es el caballo de batalla de Wolfssh. Originalmente solo permitía a uno autenticar una de las cuentas enlatadas y repetiría los caracteres escrito en ella. 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 devolución de llamada de autenticación de usuario actualizada para validar las credenciales. El EchoServer también puede manejar las conexiones SCP y SFTP.
La herramienta EchoServer acepta las siguientes opciones de línea de comando:
-1 exit after a single (one) connection
-e expect ECC public key from client
-E use ECC private key
-f echo input
-p <num> port to accept on, default 22222
-N use non-blocking sockets
-d <string> set the home directory for SFTP connections
-j <file> load in a public key to accept from peer
El cliente establece una conexión a un servidor SSH. En su modo más simple, envía la cadena "¡Hola, Wolfssh!" al servidor, imprime la respuesta y luego sale. Con la opción Pseudo Terminal, el cliente será un cliente real.
La herramienta del cliente acepta las siguientes opciones de línea de comando:
-h <host> host to connect to, default 127.0.0.1
-p <num> port to connect on, default 22222
-u <username> username to authenticate as (REQUIRED)
-P <password> password for username, prompted if omitted
-e use sample ecc key for user
-i <filename> filename for the user's private key
-j <filename> filename for the user's public key
-x exit after successful connection without doing
read/write
-N use non-blocking sockets
-t use psuedo terminal
-c <command> executes remote command and pipe stdin/stdout
-a Attempt to use SSH-AGENT
La herramienta Portfwd establece una conexión a un servidor SSH y configura un oyente para el reenvío de puertos locales o solicita un oyente para el reenvío de puertos remotos. Después de una conexión, la herramienta termina.
La herramienta Portfwd acepta las siguientes opciones de línea de comando:
-h <host> host to connect to, default 127.0.0.1
-p <num> port to connect on, default 22222
-u <username> username to authenticate as (REQUIRED)
-P <password> password for username, prompted if omitted
-F <host> host to forward from, default 0.0.0.0
-f <num> host port to forward from (REQUIRED)
-T <host> host to forward to, default to host
-t <num> port to forward to (REQUIRED)
SCPClient, WolfSCP, establece una conexión con un servidor SSH y copia los archivos especificados de o con la máquina local.
La herramienta SCPClient acepta las siguientes opciones de línea de comando:
-H <host> host to connect to, default 127.0.0.1
-p <num> port to connect on, default 22222
-u <username> username to authenticate as (REQUIRED)
-P <password> password for username, prompted if omitted
-L <from>:<to> copy from local to server
-S <from>:<to> copy from server to local
El SFTPClient, WolfSftp, establece una conexión con un servidor SSH y permite la navegación del directorio, obtener y poner archivos, hacer y eliminar directorios, etc.
La herramienta SFTPClient acepta las siguientes opciones de línea de comando:
-h <host> host to connect to, default 127.0.0.1
-p <num> port to connect on, default 22222
-u <username> username to authenticate as (REQUIRED)
-P <password> password for username, prompted if omitted
-d <path> set the default local path
-N use non blocking sockets
-e use ECC user authentication
-l <filename> local filename
-r <filename> remote filename
-g put local filename as remote filename
-G get remote filename as local filename
WolfSSH incluye soporte del lado del servidor para SCP, que incluye soporte para copiar archivos 'para' el servidor y copiar archivos 'del servidor. Tanto el archivo único como la copia del directorio recursivo son compatibles con las devoluciones de llamada de envío y recepción predeterminadas.
Para compilar WolfSsh con SCP Soport, use la opción de compilación --enable-scp o defina WOLFSSH_SCP :
$ ./configure --enable-scp
$ make
Para obtener los detalles completos de la implementación de la API, consulte el Manual del usuario de WolfSSH.
El servidor de ejemplo de WolfSsh se ha configurado para aceptar una sola solicitud SCP, y se compila de forma predeterminada al compilar la biblioteca WolfSSH. Para iniciar el servidor de ejemplo, ejecute:
$ ./examples/server/server
Los comandos SCP estándar se pueden usar en el lado del cliente. Los siguientes son algunos ejemplos, donde scp representa el cliente SSH que está utilizando.
Para copiar un solo archivo al servidor, utilizando el usuario de ejemplo predeterminado "Jill":
$ scp -P 22222 <local_file> [email protected]:<remote_path>
Para copiar el mismo archivo único al servidor, pero con marca de tiempo y en modo detallado:
$ scp -v -p -P 22222 <local_file> [email protected]:<remote_path>
Para copiar recursivamente un directorio al servidor:
$ scp -P 22222 -r <local_dir> [email protected]:<remote_dir>
Para copiar un solo archivo del servidor al cliente local:
$ scp -P 22222 [email protected]:<remote_file> <local_path>
Para copiar recursivamente un directorio del servidor al cliente local:
$ scp -P 22222 -r [email protected]:<remote_dir> <local_path>
Wolfssh brinda soporte para el reenvío de puertos. Esto permite al usuario configurar un túnel encriptado en otro servidor, donde el cliente SSH escucha en un socket y reenvía las conexiones en ese socket a otro enchufe en el servidor.
Para compilar WolfSSH con soporte de reenvío de puertos, use la opción de compilación --enable-fwd o defina WOLFSSH_FWD :
$ ./configure --enable-fwd
$ make
Para obtener los detalles completos de la implementación de la API, consulte el Manual del usuario de WolfSSH.
La herramienta de ejemplo de Portfwd creará un canal de estilo "directo-TCPIP". Estas instrucciones suponen que tiene el servidor de OpenSSH en segundo plano con el reenvío de puerto habilitado. Este ejemplo reenvía el puerto para el cliente WolfSSL al servidor como aplicación. Se supone que todos los programas se ejecutan en la misma máquina en diferentes terminales.
src/wolfssl$ ./examples/server/server
src/wolfssh$ ./examples/portfwd/portfwd -p 22 -u <username>
-f 12345 -t 11111
src/wolfssl$ ./examples/client/client -p 12345
De manera predeterminada, el servidor WolfSSL escucha en el puerto 11111. El cliente está configurado para intentar conectarse al puerto 12345. El Portfwd inicia sesión como "Nombre de usuario" del usuario, abre un oyente en el puerto 12345 y se conecta al servidor en el puerto 11111. Los paquetes se enrutan entre el cliente y el servidor. "¡Hola, Wolfssl!"
La fuente de Portfwd proporciona un ejemplo sobre cómo configurar y usar el soporte de reenvío de puertos en WolfSSH.
ECHOSERVER manejará el reenvío de puertos locales y remotos. Para conectarse con la herramienta SSH, utilizando una de las siguientes líneas de comando. Puede ejecutar cualquiera de las líneas de comando SSH desde cualquier lugar:
src/wolfssl$ ./examples/server/server
src/wolfssh$ ./examples/echoserver/echoserver
anywhere 1$ ssh -p 22222 -L 12345:localhost:11111 jill@localhost
anywhere 2$ ssh -p 22222 -R 12345:localhost:11111 jill@localhost
src/wolfssl$ ./examples/client/client -p 12345
Esto permitirá el reenvío de puertos entre el cliente y servidor WolfSSL como en el ejemplo anterior.
WolfSSH proporciona soporte de servidor y parte del cliente para SFTP versión 3. Esto permite al usuario configurar una conexión encriptada para administrar sistemas de archivos.
Para compilar WolfSsh con el soporte SFTP, use la opción de compilación --enable-sftp o defina WOLFSSH_SFTP :
$ ./configure --enable-sftp
$ make
Para obtener los detalles completos de la implementación de la API, consulte el Manual del usuario de WolfSSH.
El cliente SFTP creado se encuentra en los ejemplos de directorio/ SFTPClient/ y el ejemplo ECHOSERVER actúa como un servidor SFTP.
src/wolfssh$ ./examples/sftpclient/wolfsftp
Se puede ver una lista completa de comandos compatibles con la escritura de "ayuda" después de una conexión.
wolfSSH sftp> help
Commands :
cd <string> change directory
chmod <mode> <path> change mode
get <remote file> <local file> pulls file(s) from server
ls list current directory
mkdir <dir name> creates new directory on server
put <local file> <remote file> push file(s) to server
pwd list current path
quit exit
rename <old> <new> renames remote file
reget <remote file> <local file> resume pulling file
reput <remote file> <local file> resume pushing file
<crtl + c> interrupt get/put cmd
Un ejemplo de conectarse a otro sistema sería
src/wolfssh$ ./examples/sftpclient/wolfsftp -p 22 -u user -h 192.168.1.111
El ejemplo de Wolfssh Echoserver ahora puede desembolsar un shell para el usuario que intenta iniciar sesión. Actualmente solo se ha probado en Linux y MacOS. El archivo echoserver.c debe modificarse para tener las credenciales del usuario en la devolución de llamada de autenticación del usuario, o la devolución de llamada de autenticación del usuario debe cambiarse para verificar la contraseña proporcionada.
Para compilar WolfSsh con soporte de conchas, use la opción de construcción --enable-shell o defina WOLFSSH_SHELL :
$ ./configure --enable-shell
$ make
Para probar esta funcionalidad, puede usar el ejemplo ECHOSERVER y el cliente. En un terminal, haga lo siguiente para iniciar el servidor:
$ ./examples/echoserver/echoserver -P <user>:junk
Y en otro terminal haga lo siguiente para iniciar el cliente de ejemplo:
$ ./examples/client/client -t -u <user> -P junk
Tenga en cuenta que <user> debe ser el nombre de usuario del usuario actual que está iniciado.
Por defecto, el Echoserver intentará iniciar un shell. Para usar el comportamiento de prueba de eco, proporcione a Echoserver la opción de línea de comando -f .
$ ./examples/echoserver/echoserver -f
Para usar la función Shell con WolfSshd Add --enable-sshd en su comando Configurar y use el siguiente comando:
$ sudo ./apps/wolfsshd/wolfsshd -D -h keys/gretel-key-ecc.pem -p 11111
Si se queja de un archivo sshd_config malo, simplemente copie a otro archivo y elimine la línea ofensiva de la que se queja y usa el parámetro de línea de comandos -f para apuntar al nuevo archivo.
Luego puede conectarse al servidor wolfsshd con SSH:
$ ssh <user>@localhost -p 11111
Tenga en cuenta que <user> debe ser el nombre de usuario del usuario actual que está iniciado.
Wolfssh ahora admite Curve25519 para Key Exchange. Para habilitar este soporte, simplemente compile a WolfsSL con apoyo para Wolfssh y Curve25519.
$ cd wolfssl
$ ./configure --enable-wolfssh --enable-curve25519
Después de construir e instalar WolfSSL, simplemente puede configurar sin opciones.
$ cd wolfssh
$ ./configure
El cliente y el servidor de WolfSSH negociarán automáticamente usando Curve25519.
$ ./examples/echoserver/echoserver -f
$ ./examples/client/client -u jill -P upthehill
Wolfssh ahora apoya el algoritmo Post-Quantum ML-DSA (también conocido como Kyber). Utiliza el conjunto de parámetros Kyber512 y se hibridan con ECDHE sobre la curva ECC P-256.
Para utilizar este intercambio de claves, debe construir e instalar WolfSSL en su sistema. Aquí hay un ejemplo de una configuración efectiva:
$ ./configure --enable-wolfssh --enable-experimental --enable-kyber
Después de eso, simplemente configure y cree WolfSsh como de costumbre:
$ ./configure
$ make all
El cliente y el servidor de WolfSSH negociarán automáticamente utilizando KYBER512 hibridado con ECDHE sobre la curva ECC P-256.
$ ./examples/echoserver/echoserver -f
$ ./examples/client/client -u jill -P upthehill
En el lado del cliente, verá la siguiente salida:
El servidor dijo: ¡Hola, Wolfssh!
Si desea ver la interoperabilidad con la bifurcación de OpenSSH de OpenqauntumSafe, puede construir y ejecutar la horquilla mientras el Echoserver se está ejecutando. Descargue el lanzamiento desde aquí:
https://github.com/open-quantum-safe/openssh/archive/refs/tags/OQS-OpenSSH-snapshot-2021-08.tar.gz
Lo siguiente es suficiente para la construcción y la ejecución:
$ tar xmvf openssh-OQS-OpenSSH-snapshot-2021-08.tar.gz
$ cd openssh-OQS-OpenSSH-snapshot-2021-08/
$ ./configure --with-liboqs-dir=/usr/local
$ make all
$ ./ssh -o"KexAlgorithms=ecdh-nistp256-kyber-512r3-sha256-d00@openquantumsafe.org"
-o"PubkeyAcceptedAlgorithms +ssh-rsa"
-o"HostkeyAlgorithms +ssh-rsa"
jill@localhost -p 22222
Nota: Cuando se le solicite, ingrese la contraseña que es "UpThehill".
Puede escribir una línea de texto y cuando presione ENTER, la línea se eco de retroceder. Use CTRL-C para terminar la conexión.
Wolfssh puede aceptar certificados X.509 en lugar de solo claves públicas al autenticar a un usuario.
Para compilar WolfSsh con el soporte X.509, use la opción de compilación de --enable-certs o defina WOLFSSH_CERTS :
$ ./configure --enable-certs CPPFLAGS=-DWOLFSSH_NO_FPKI
$ make
Para este ejemplo, estamos deshabilitando la verificación FPKI como el certificado incluido para "Fred" no tiene las extensiones FPKI requeridas. Si se elimina la bandera wolfssh_no_fpki, puede ver que el certificado se rechace.
Para proporcionar un certificado raíz de CA para validar el certificado de un usuario, le dé al EchoServer la opción de línea de comandos -a .
$ ./examples/echoserver/echoserver -a ./keys/ca-cert-ecc.pem
ECHOSERVER y el cliente tienen un usuario falso llamado "Fred" cuyo certificado se utilizará para la autenticación.
Un ejemplo de conexión ECHOSERVER / Cliente utilizando el Certificado de ejemplo Fred-Cert.der sería:
$ ./examples/echoserver/echoserver -a ./keys/ca-cert-ecc.pem -K fred:./keys/fred-cert.der
$ ./examples/client/client -u fred -J ./keys/fred-cert.der -i ./keys/fred-key.der
Wolfssh viene con un demonio del servidor y una herramienta de shell de línea de comandos. Consulte el directorio de aplicaciones para obtener más información.