Petite bibliothèque client et serveur SSHv2 embarquable et portable en C avec SCP, SFTP, redirection de ports et échange de clés post-quantique pour les systèmes embarqués et IoT.
Serveur SSH embarquable de wolfSSL Manuel wolfSSH
wolfSSH dépend de wolfCrypt, qui fait partie de wolfSSL. Voici 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 optionnelle ldconfig 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.
Lors de l'utilisation de certificats X.509 pour l'authentification des utilisateurs, wolfSSL doit être
compilé avec TLS activé. wolfSSH utilise le système de gestionnaire de certificats de wolfSSL
pour X.509, y compris les recherches OCSP. Pour autoriser OCSP, ajoutez --enable-ocsp à la
configuration de wolfSSL.
Si la majeure partie du code de wolfSSL n'est pas souhaitée, wolfSSL peut être configuré avec
l'option crypto uniquement : --enable-cryptonly.
Des options de compilation supplémentaires pour wolfSSL sont disponibles dans le chapitre deux du manuel wolfSSH.
Depuis le répertoire source de wolfSSH, exécutez :
$ ./autogen.sh (si cloné depuis GitHub)
$ ./configure --with-wolfssl=[/usr/local]
$ make
$ make check
Le script autogen.sh ne doit être exécuté que la première fois après avoir cloné
le dépôt. Si vous l'avez déjà exécuté ou si vous utilisez le code d'une
archive source, vous devez l'ignorer.
Pour compiler sous Windows avec Visual Studio, consultez le fichier "ide/winvs/README.md".
REMARQUE : Sur les appareils à ressources limitées, DEFAULT_WINDOW_SZ peut devoir
être défini à une taille inférieure. Il peut également être augmenté dans les cas d'utilisation sur bureau
pour faciliter les transferts de fichiers volumineux. Par défaut, les canaux sont configurés pour recevoir
jusqu'à 128kB 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 plateformes Linux 32 bits, vous pouvez ajouter la prise en charge des fichiers > 2GB en compilant
avec CFLAGS=-D_FILE_OFFSET_BITS=64.
Le répertoire examples contient un echoserver auquel n'importe quel client devrait
pouvoir se connecter. Depuis le terminal, exécutez :
$ ./examples/echoserver/echoserver -f
L'option -f active le mode echo uniquement. Depuis un autre terminal, exécutez :
$ ssh jill@localhost -p 22222
Lorsque le mot de passe est demandé, entrez "upthehill". Le serveur enverra une bannière prédéfinie au client :
wolfSSH Example Echo Server
Les caractères saisis dans le client seront renvoyés à l'écran par le serveur. Si les caractères sont renvoyés deux fois, le client a l'écho local activé. L'echoserver n'est pas un véritable terminal, 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 avoir cloné le dépôt, assurez-vous de rendre les clés privées de test
en lecture seule pour l'utilisateur, sinon ssh vous demandera 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 auprès de l'echoserver d'exemple peut se faire 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ù les paires USER et mot de passe sont :
jill:upthehill
jack:fetchapail
Pour utiliser l'authentification par clé publique, utilisez la ligne de commande :
$ ssh -i ./keys/USER-key-TYPE.pem -p 22222 USER@localhost
Où USER peut être gretel ou hansel, et TYPE est rsa ou
ecc.
Gardez à l'esprit que l'echoserver possède plusieurs faux comptes dans sa
fonction de rappel wsUserAuth(). (jack, jill, hansel et gretel) Lorsque
la prise en charge du 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 renverra une erreur car ils n'existent pas dans le système. Vous
pouvez ajouter votre propre nom d'utilisateur à la liste des mots de passe ou des clés publiques 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 livré avec quelques outils d'exemple à des fins de test et pour démontrer l'interopérabilité avec d'autres implémentations SSH.
L'echoserver est la pièce maîtresse de wolfSSH. À l'origine, il ne permettait de s'authentifier qu'avec l'un des comptes prédéfinis et répétait les caractères saisis. Lors de l'activation de la prise en charge du shell, il peut lancer 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 identifiants. L'echoserver peut également gérer les connexions SCP et SFTP.
L'outil echoserver accepte les options de ligne de commande suivantes :
-1 quitter après une seule (unique) connexion
-e attendre une clé publique ECC du client
-E utiliser une clé privée ECC
-f echo de l'entrée
-p <num> port d'écoute, par défaut 22222
-N utiliser des sockets non bloquants
-d <string> définir le répertoire personnel pour les connexions SFTP
-j <file> charger une clé publique à accepter du pair
Le client établit une connexion à un serveur SSH. Dans son mode le plus simple, il envoie la chaîne "Hello, wolfSSH!" au serveur, affiche la réponse, puis quitte. Avec l'option pseudo terminal, le client sera un véritable client.
L'outil client accepte les options de ligne de commande suivantes :
-h <host> hôte auquel se connecter, par défaut 127.0.0.1
-p <num> port de connexion, par défaut 22222
-u <username> nom d'utilisateur pour l'authentification (REQUIS)
-P <password> mot de passe pour le nom d'utilisateur, demandé si omis
-e utiliser une clé ecc d'exemple pour l'utilisateur
-i <filename> nom de fichier pour la clé privée de l'utilisateur
-j <filename> nom de fichier pour la clé publique de l'utilisateur
-x quitter après une connexion réussie sans effectuer de
lecture/écriture
-N utiliser des sockets non bloquants
-t utiliser un pseudo terminal
-c <command> exécute une commande distante et redirige stdin/stdout
-a Tenter d'utiliser SSH-AGENT
L'outil portfwd établit une connexion à un serveur SSH et configure un écouteur pour la redirection de port locale ou demande un écouteur pour la redirection de port distante. Après une connexion, l'outil se termine.
L'outil portfwd accepte les options de ligne de commande suivantes :