Manuel Wolfsssh EmbedDable SSH Server EmbedDable
Wolfssh dépend de Wolfcrypt, trouvé dans le cadre de Wolfssl. Ce qui suit est la configuration la plus simple de WolfSSL pour activer Wolfssh.
$ cd wolfssl
$ ./configure [OPTIONS] --enable-ssh
$ make check
$ sudo make install
Sur certains systèmes, la commande LDConfig en option est nécessaire après l'installation.
Pour utiliser la fonction de génération de clés dans WolfSSH, WolfSSL devra être configuré avec Keygen: --enable-keygen .
Lorsque vous utilisez des certificats X.509 pour l'authentification des utilisateurs, WolfSSL doit être construit avec TLS activé. Wolfssh utilise le système de gestionnaire de certificat de WolfSSL pour X.509, y compris les recherches OCSP. Pour permettre OCSP, ajoutez --enable-ocsp à la configuration de Wolfssl.
Si la majeure partie du code WolfSSL n'est pas souhaitée, WolfSSL peut être configuré avec l'option Crypto uniquement: --enable-cryptonly .
Des options de construction supplémentaires pour WolfSSL sont situées au chapitre deux. du manuel Wolfssh.
De la course du répertoire source Wolfssh:
$ ./autogen.sh
$ ./configure --with-wolfssl=[/usr/local]
$ make
$ make check
Le script autogen.sh ne doit être exécuté que la première fois après le clonage du référentiel. Si vous l'avez déjà exécuté ou utilisez du code à partir d'une archive source, vous devez le sauter.
Pour construire sous Windows avec Visual Studio, consultez le fichier "ide / winvs / readme.md".
Remarque: Sur les périphériques contraints des ressources, le DEFAULT_WINDOW_SZ peut devoir être défini sur une taille inférieure. Il peut également être augmenté dans les cas d'utilisation de bureau pour aider avec les transferts de fichiers importants. Par défaut, les canaux sont définis pour recevoir jusqu'à 128 Ko de données avant d'envoyer un message d'ajustement de fenêtre de canal. Un exemple de définition d'une taille de fenêtre pour les nouveaux canaux serait le suivant ./configure CPPFLAGS="-DDEFAULT_WINDOW_SZ=16384"
Pour les plates-formes Linux 32 bits, vous pouvez ajouter la prise en charge des fichiers> 2 Go en compliquant avec CFLAGS=-D_FILE_OFFSET_BITS=64 .
Les examples de répertoire contient un Echoserver à laquelle tout client doit pouvoir se connecter. À partir du terminal:
$ ./examples/echoserver/echoserver -f
L'option -f permet le mode écho uniquement. À partir d'un autre terminal:
$ ssh jill@localhost -p 22222
Lorsque vous êtes invité à un mot de passe, entrez "uphehill". Le serveur enverra une bannière en conserve au client:
wolfSSH Example Echo Server
Les caractères tapés dans le client seront repris à l'écran par le serveur. Si les caractères sont repris deux fois, le client a activé Echo local. L'Echoserver n'est pas un terminal approprié, donc la traduction CR / LF ne fonctionnera pas comme prévu.
Les caractères de contrôle suivants déclencheront des actions spéciales dans l'Echoserver:
Après le clonage du référentiel, assurez-vous de rendre les clés privées en lecture seule pour l'utilisateur, sinon ssh vous dira de le faire.
$ chmod 0600 ./keys/gretel-key-rsa.pem ./keys/hansel-key-rsa.pem
./keys/gretel-key-ecc.pem ./keys/hansel-key-ecc.pem
L'authentification contre l'exemple Echoserver peut être effectuée avec un mot de passe ou une clé publique. Pour utiliser un mot de passe, la ligne de commande:
$ ssh -p 22222 USER@localhost
Où sont les paires d'utilisateurs et de mot de passe:
jill:upthehill
jack:fetchapail
Pour utiliser l'authentification de la clé publique, utilisez la ligne de commande:
$ ssh -i ./keys/USER-key-TYPE.pem -p 22222 USER@localhost
Où l' utilisateur peut être gretel ou hansel , et le type est rsa ou ecc .
Gardez à l'esprit que l'Echoserver a plusieurs faux comptes dans sa fonction de rappel wsUserAuth() . (Jack, Jill, Hansel et Gretel) Lorsque la prise en charge de Shell est activée, ces faux comptes ne fonctionneront pas. Ils n'existent pas dans le fichier Passwd du système. Les utilisateurs s'authentifieront, mais le serveur se trompera car ils n'existent pas dans le système. Vous pouvez ajouter votre propre nom d'utilisateur au mot de passe ou à la liste des clés publics dans l'Echoserver. Ce compte sera connecté à un shell démarré par l'Echoserver avec les privilèges de l'utilisateur exécutant Echoserver.
Wolfssh est emballé avec quelques exemples d'outils à des fins de test et pour démontrer l'interopérabilité avec d'autres implémentations SSH.
L'Echoserver est le cheval de bataille de Wolfssh. Il ne permettait qu'à l'origine d'authentifier l'un des comptes en conserve et répéterait les caractères tapés dedans. Lors de l'activation de la prise en charge du shell, il peut engendrer un shell utilisateur. Il aura besoin d'un nom d'utilisateur réel sur la machine et d'une fonction de rappel d'authentification utilisateur mise à jour pour valider les informations d'identification. L'Echoserver peut également gérer les connexions SCP et SFTP.
L'outil Echoserver accepte les options de ligne de commande suivantes:
-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
Le client établit une connexion à un serveur SSH. Dans son mode le plus simple, il envoie la chaîne "Bonjour, loupsh!" au serveur, imprime la réponse, puis sort. Avec l'option Pseudo Terminal, le client sera un vrai client.
L'outil client accepte les options de ligne de commande suivantes:
-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
L'outil PORTFWD établit une connexion à un serveur SSH et configure un écouteur pour la transfert de port locale ou demande à un écouteur de transfert de port distant. Après une connexion, l'outil se termine.
L'outil PortfWD accepte les options de ligne de commande suivantes:
-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)
Le SCPClient, WolfSCP, établit une connexion à un serveur SSH et copie les fichiers spécifiés de ou vers la machine locale.
L'outil SCPClient accepte les options de ligne de commande suivantes:
-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
Le SFTPClient, WolfSftp, établit une connexion à un serveur SSH et permet de naviguer, d'obtenir et de mettre des fichiers, de fabriquer et de supprimer les répertoires, etc.
L'outil SFTPClient accepte les options de ligne de commande suivantes:
-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 inclut la prise en charge côté serveur de SCP, qui comprend la prise en charge des deux fichiers de copie 'au «serveur et à la copie des fichiers» à partir du «serveur. Le fichier unique et la copie de répertoire récursif sont pris en charge avec les rappels par défaut et reçoivent des rappels.
Pour compiler Wolfssh avec le support SCP, utilisez l'option de construction --enable-scp ou définissez WOLFSSH_SCP :
$ ./configure --enable-scp
$ make
Pour les détails complètes de l'utilisation de l'API et de la mise en œuvre, veuillez consulter le manuel d'utilisation de WolfSSH.
Le serveur d'exemple WolfSSH a été configuré pour accepter une seule demande SCP et est compilé par défaut lors de la compilation de la bibliothèque WolfSSH. Pour démarrer l'exemple de serveur, exécutez:
$ ./examples/server/server
Les commandes SCP standard peuvent être utilisées du côté client. Voici quelques exemples, où scp représente le client SSH que vous utilisez.
Pour copier un seul fichier sur le serveur, en utilisant l'exemple par défaut "Jill":
$ scp -P 22222 <local_file> [email protected]:<remote_path>
Pour copier le même fichier unique sur le serveur, mais avec l'horodatage et en mode verbeux:
$ scp -v -p -P 22222 <local_file> [email protected]:<remote_path>
Pour copier récursivement un répertoire sur le serveur:
$ scp -P 22222 -r <local_dir> [email protected]:<remote_dir>
Pour copier un seul fichier à partir du serveur au client local:
$ scp -P 22222 [email protected]:<remote_file> <local_path>
Pour copier récursivement un répertoire du serveur au client local:
$ scp -P 22222 -r [email protected]:<remote_dir> <local_path>
WolfSSH fournit un support pour le transfert de port. Cela permet à l'utilisateur de configurer un tunnel chiffré vers un autre serveur, où le client SSH écoute sur une prise et transmet les connexions sur cette prise vers une autre prise du serveur.
Pour compiler WolfSSh avec le support de transfert de port, utilisez l'option de création --enable-fwd ou définissez WOLFSSH_FWD :
$ ./configure --enable-fwd
$ make
Pour les détails complètes de l'utilisation de l'API et de la mise en œuvre, veuillez consulter le manuel d'utilisation de WolfSSH.
L'exemple d'outil PORTFWD créera un canal de style "Direct-TCPIP". Ces directions supposent que le serveur d'OpenSSH s'exécute en arrière-plan avec la transmission de port activée. Cet exemple transfère le port du client WolfSSL au serveur en tant qu'application. Il suppose que tous les programmes sont exécutés sur la même machine dans différents terminaux.
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
Par défaut, le serveur Wolfssl écoute le port 11111. Le client est défini pour essayer de se connecter au port 12345. Le portfwd se connecte en tant que nom d'utilisateur utilisateur, ouvre un écouteur sur le port 12345 et se connecte au serveur du port 11111. Les paquets sont acheminés entre le client et le serveur. "Bonjour, Wolfsssl!"
La source de PortFWD fournit un exemple sur la façon de configurer et d'utiliser le support de transfert de port dans WolfSSH.
L'Echoserver gérera la transmission locale et distante de port. Pour se connecter avec l'outil SSH, en utilisant l'une des lignes de commande suivantes. Vous pouvez exécuter l'une ou l'autre des lignes de commande SSH de n'importe où:
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
Cela permettra un transfert de port entre le client WolfSSL et le serveur comme dans l'exemple précédent.
WolfSSH fournit une prise en charge côté serveur et client pour SFTP version 3. Cela permet à l'utilisateur de configurer une connexion cryptée pour gérer les systèmes de fichiers.
Pour compiler Wolfssh avec le support SFTP, utilisez l'option de construction --enable-sftp ou définissez WOLFSSH_SFTP :
$ ./configure --enable-sftp
$ make
Pour les détails complètes de l'utilisation de l'API et de la mise en œuvre, veuillez consulter le manuel d'utilisation de WolfSSH.
Le client SFTP créé est situé dans les exemples de répertoire / SFTPClient / et l'exemple Echoserver agit comme un serveur SFTP.
src/wolfssh$ ./examples/sftpclient/wolfsftp
Une liste complète des commandes prises en charge peut être vue avec la saisie de «l'aide» après une connexion.
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 exemple de connexion à un autre système serait
src/wolfssh$ ./examples/sftpclient/wolfsftp -p 22 -u user -h 192.168.1.111
L'exemple Echoserver de WolfSsh peut désormais déborder un shell pour l'utilisateur qui essaie de se connecter. Cela n'a actuellement été testé que sur Linux et MacOS. Le fichier echoserver.c doit être modifié pour que les informations d'identification de l'utilisateur dans le rappel d'authentification de l'utilisateur, ou le rappel d'authentification de l'utilisateur doit être modifié pour vérifier le mot de passe fourni.
Pour compiler Wolfssh avec le support Shell, utilisez l'option de construction --enable-shell ou définissez WOLFSSH_SHELL :
$ ./configure --enable-shell
$ make
Pour essayer cette fonctionnalité, vous pouvez utiliser l'exemple Echoserver et le client. Dans un terminal, faites ce qui suit pour lancer le serveur:
$ ./examples/echoserver/echoserver -P <user>:junk
Et dans un autre terminal, faites ce qui suit pour lancer l'exemple Client:
$ ./examples/client/client -t -u <user> -P junk
Notez que <user> doit être le nom d'utilisateur de l'utilisateur actuel qui est connecté.
Par défaut, l'Echoserver essaiera de démarrer un shell. Pour utiliser le comportement de test d'écho, donnez à l'échoserver l'option de ligne de commande -f .
$ ./examples/echoserver/echoserver -f
Pour utiliser la fonctionnalité Shell avec WolfSSHD ADD --enable-sshd à votre commande Configurer et utilisez la commande suivante:
$ sudo ./apps/wolfsshd/wolfsshd -D -h keys/gretel-key-ecc.pem -p 11111
S'il se plaint d'un mauvais fichier sshd_config , copiez-le simplement dans un autre fichier et supprimez la ligne offensée dont il se plaint et utilisez le paramètre de ligne de commande -f pour pointer vers le nouveau fichier.
Vous pouvez ensuite vous connecter au serveur wolfsshd avec SSH:
$ ssh <user>@localhost -p 11111
Notez que <user> doit être le nom d'utilisateur de l'utilisateur actuel qui est connecté.
WolfSsh prend désormais en charge Curve25519 pour Key Exchange. Pour activer ce soutien, compilez simplement WolfSSL avec le soutien de Wolfssh et Curve25519.
$ cd wolfssl
$ ./configure --enable-wolfssh --enable-curve25519
Après avoir construit et installé WolfSSL, vous pouvez simplement vous configurer sans option.
$ cd wolfssh
$ ./configure
Le client et le serveur WolfSSH négocieront automatiquement à l'aide de Curve25519.
$ ./examples/echoserver/echoserver -f
$ ./examples/client/client -u jill -P upthehill
Wolfsh soutient désormais l'algorithme post-Quantum ML-DSA (également connu sous le nom de Kyber). Il utilise l'ensemble de paramètres KYBER512 et est hybridé avec ECDHE sur la courbe ECC P-256.
Afin d'utiliser cet échange de clés, vous devez créer et installer WolfSSL sur votre système. Voici un exemple de configuration efficace:
$ ./configure --enable-wolfssh --enable-experimental --enable-kyber
Après cela, configurez et construisez simplement Wolfssh comme d'habitude:
$ ./configure
$ make all
Le client et serveur WolfSSH négocieront automatiquement en utilisant KYBER512 hybride avec ECDHE sur la courbe ECC P-256.
$ ./examples/echoserver/echoserver -f
$ ./examples/client/client -u jill -P upthehill
Côté client, vous verrez la sortie suivante:
Le serveur a dit: Bonjour, loupsh!
Si vous voulez voir l'interopérabilité avec OpenShe d'OpenQautumsafe d'OpenSSH, vous pouvez construire et exécuter la fourche pendant que l'Echoserver s'exécute. Téléchargez la version d'ici:
https://github.com/open-quantum-safe/openssh/archive/refs/tags/OQS-OpenSSH-snapshot-2021-08.tar.gz
Ce qui suit est suffisant pour la construction et l'exécution:
$ 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
Remarque: lorsque vous êtes invité, entrez le mot de passe qui est "upthehill".
Vous pouvez taper une ligne de texte et lorsque vous appuyez sur Entrée, la ligne sera reculée. Utilisez Ctrl-C pour terminer la connexion.
Wolfssh peut accepter les certificats X.509 à la place des clés publiques seulement lors de l'authentification d'un utilisateur.
Pour compiler Wolfssh avec le support X.509, utilisez l'option de construction --enable-certs ou définissez WOLFSSH_CERTS :
$ ./configure --enable-certs CPPFLAGS=-DWOLFSSH_NO_FPKI
$ make
Pour cet exemple, nous désactivons la vérification FPKI car le certificat inclus pour "Fred" n'a pas les extensions FPKI requises. Si le drapeau Wolfssh_NO_FPKI est supprimé, vous pouvez voir le certificat rejeter.
Pour fournir un certificat racine CA pour valider le certificat d'un utilisateur, donnez à l'option Echoserver de la ligne de commande -a .
$ ./examples/echoserver/echoserver -a ./keys/ca-cert-ecc.pem
L'Echoserver et le client ont un faux utilisateur nommé "Fred" dont le certificat sera utilisé pour l'authentification.
Un exemple de connexion Echoserver / Client à l'aide de l'exemple de certificat Fred-Cert.der serait:
$ ./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 est livré avec un démon de serveur et un outil de coquille de ligne de commande. Consultez le répertoire des applications pour plus d'informations.