
Kleine, portable, einbettbare SSHv2-Client- und -Server-Bibliothek in C mit SCP, SFTP, Portweiterleitung und Post-Quanten-Schlüsselaustausch für eingebettete Systeme und IoT-Systeme.
wolfSSLs einbettbarer SSH-Server wolfSSH-Handbuch
wolfSSH ist abhängig von wolfCrypt, das als Teil von wolfSSL zu finden ist. Das Folgende ist die einfachste Konfiguration von wolfSSL, um wolfSSH zu aktivieren.
$ cd wolfssl
$ ./configure [OPTIONS] --enable-ssh
$ make check
$ sudo make install
Auf manchen Systemen ist der optionale Befehl ldconfig nach der Installation erforderlich.
Um die Schlüsselgenerierungsfunktion in wolfSSH zu nutzen, muss wolfSSL mit
keygen konfiguriert werden: --enable-keygen.
Bei der Verwendung von X.509-Zertifikaten zur Benutzerauthentifizierung muss wolfSSL
mit aktiviertem TLS gebaut werden. wolfSSH verwendet das Zertifikatsverwaltungssystem von wolfSSL
für X.509, einschließlich OCSP-Abfragen. Um OCSP zu ermöglichen, fügen Sie --enable-ocsp zur
wolfSSL-Konfiguration hinzu.
Wenn der Großteil des wolfSSL-Codes nicht gewünscht ist, kann wolfSSL mit
der Nur-Krypto-Option konfiguriert werden: --enable-cryptonly.
Weitere Build-Optionen für wolfSSL finden Sie in Kapitel zwei des wolfSSH-Handbuchs.
Führen Sie aus dem wolfSSH-Quellverzeichnis aus:
$ ./autogen.sh (falls von GitHub geklont)
$ ./configure --with-wolfssl=[/usr/local]
$ make
$ make check
Das Skript autogen.sh muss nur beim ersten Mal nach dem Klonen
des Repositorys ausgeführt werden. Wenn Sie es bereits ausgeführt haben oder Code aus einem
Quellarchiv verwenden, sollten Sie es überspringen.
Für das Erstellen unter Windows mit Visual Studio siehe die Datei "ide/winvs/README.md".
HINWEIS: Auf ressourcenbeschränkten Geräten muss möglicherweise DEFAULT_WINDOW_SZ auf
eine niedrigere Größe gesetzt werden. Er kann auch in Desktop-Anwendungsfällen erhöht werden,
um große Dateiübertragungen zu unterstützen. Standardmäßig sind Kanäle so eingestellt, dass sie
bis zu 128 kB an Daten empfangen, bevor eine Kanal-Fensteranpassungsnachricht gesendet wird. Ein
Beispiel für das Festlegen einer Fenstergröße für neue Kanäle wäre wie folgt:
./configure CPPFLAGS="-DDEFAULT_WINDOW_SZ=16384"
Für 32-Bit-Linux-Plattformen können Sie Unterstützung für Dateien > 2 GB hinzufügen, indem Sie
mit CFLAGS=-D_FILE_OFFSET_BITS=64 kompilieren.
Das Verzeichnis examples enthält einen Echoserver, mit dem sich jeder Client
verbinden können sollte. Führen Sie im Terminal aus:
$ ./examples/echoserver/echoserver -f
Die Option -f aktiviert den Nur-Echo-Modus. Führen Sie in einem anderen Terminal aus:
$ ssh jill@localhost -p 22222
Wenn Sie zur Eingabe eines Passworts aufgefordert werden, geben Sie "upthehill" ein. Der Server sendet ein vorgefertigtes Banner an den Client:
wolfSSH Example Echo Server
In den Client eingegebene Zeichen werden vom Server auf dem Bildschirm wiedergegeben. Wenn die Zeichen zweimal wiedergegeben werden, hat der Client die lokale Echo-Funktion aktiviert. Der Echoserver ist kein richtiges Terminal, daher funktioniert die CR/LF- Übersetzung nicht wie erwartet.
Die folgenden Steuerzeichen lösen im Echoserver spezielle Aktionen aus:
Stellen Sie nach dem Klonen des Repositorys sicher, dass die privaten Testsclüssel
für den Benutzer schreibgeschützt sind, andernfalls wird ssh Ihnen sagen, dass Sie dies tun sollen.
$ chmod 0600 ./keys/gretel-key-rsa.pem ./keys/hansel-key-rsa.pem \
./keys/gretel-key-ecc.pem ./keys/hansel-key-ecc.pem
Die Authentifizierung gegenüber dem Beispiel-Echoserver kann mit einem Passwort oder öffentlichen Schlüssel erfolgen. Um ein Passwort zu verwenden, lautet die Befehlszeile:
$ ssh -p 22222 USER@localhost
Wobei die USER- und Passwort-Paare sind:
jill:upthehill
jack:fetchapail
Um die Authentifizierung mit öffentlichem Schlüssel zu verwenden, nutzen Sie die Befehlszeile:
$ ssh -i ./keys/USER-key-TYPE.pem -p 22222 USER@localhost
Wobei USER gretel oder hansel sein kann und TYPE rsa oder
ecc.
Beachten Sie, dass der Echoserver mehrere gefälschte Konten in seiner
wsUserAuth()-Callback-Funktion hat. (jack, jill, hansel und gretel) Wenn
die Shell-Unterstützung aktiviert ist, funktionieren diese gefälschten Konten nicht. Sie
existieren nicht in der passwd-Datei des Systems. Die Benutzer werden sich authentifizieren,
aber der Server wird einen Fehler ausgeben, weil sie im System nicht existieren. Sie
können Ihren eigenen Benutzernamen zur Passwort- oder öffentlichen Schlüsselliste im
Echoserver hinzufügen. Dieses Konto wird in eine Shell eingeloggt, die vom
Echoserver mit den Privilegien des Benutzers gestartet wird, der den Echoserver ausführt.
wolfSSH wird mit einigen Beispielwerkzeugen für Testzwecke und zur Demonstration der Interoperabilität mit anderen SSH-Implementierungen geliefert.
Der Echoserver ist das Arbeitstier von wolfSSH. Ursprünglich erlaubte er nur die Authentifizierung mit einem der vorgefertigten Konten und wiederholte die eingegebenen Zeichen. Wenn die Shell-Unterstützung aktiviert ist, kann er eine Benutzer-Shell starten. Er benötigt einen tatsächlichen Benutzernamen auf dem Rechner und eine aktualisierte Benutzerauthentifizierungs-Callback-Funktion, um die Anmeldedaten zu validieren. Der Echoserver kann auch SCP- und SFTP-Verbindungen verarbeiten.
Das Echoserver-Werkzeug akzeptiert die folgenden Befehlszeilenoptionen:
-1 nach einer einzelnen (einen) Verbindung beenden
-e ECC öffentlichen Schlüssel vom Client erwarten
-E ECC privaten Schlüssel verwenden
-f Eingabe wiedergeben
-p <num> Port, auf dem akzeptiert wird, Standard 22222
-N nicht blockierende Sockets verwenden
-d <string> das Home-Verzeichnis für SFTP-Verbindungen festlegen
-j <file> einen öffentlichen Schlüssel laden, der vom Peer akzeptiert wird
Der Client stellt eine Verbindung zu einem SSH-Server her. Im einfachsten Modus sendet er die Zeichenkette "Hello, wolfSSH!" an den Server, gibt die Antwort aus und beendet sich dann. Mit der Pseudo-Terminal-Option wird der Client ein echter Client.
Das Client-Werkzeug akzeptiert die folgenden Befehlszeilenoptionen:
-h <host> Host, mit dem verbunden werden soll, Standard 127.0.0.1
-p <num> Port, mit dem verbunden werden soll, Standard 22222
-u <username> Benutzername, als der authentifiziert werden soll (ERFORDERLICH)
-P <password> Passwort für den Benutzernamen, wird abgefragt, wenn weggelassen
-e Beispiel-ECC-Schlüssel für den Benutzer verwenden
-i <filename> Dateiname für den privaten Schlüssel des Benutzers
-j <filename> Dateiname für den öffentlichen Schlüssel des Benutzers
-x nach erfolgreicher Verbindung beenden, ohne
Lesen/Schreiben
-N nicht blockierende Sockets verwenden
-t Pseudo-Terminal verwenden
-c <command> führt einen entfernten Befehl aus und leitet stdin/stdout weiter
-a Versuch, SSH-AGENT zu verwenden
Das portfwd-Werkzeug stellt eine Verbindung zu einem SSH-Server her und richtet einen Listener für lokale Portweiterleitung ein oder fordert einen Listener für entfernte Port- weiterleitung an. Nach einer Verbindung beendet sich das Werkzeug.
Das portfwd-Werkzeug akzeptiert die folgenden Befehlszeilenoptionen: