WolfSSLs eingebettbares SSH -Server WolfSSH -Handbuch
WolfSsh ist auf Wolfcrypt angewiesen, das als Teil von WolfSSL zu finden ist. Das Folgende ist die einfachste Konfiguration von WolfSSL, um WolfSsh zu ermöglichen.
$ cd wolfssl
$ ./configure [OPTIONS] --enable-ssh
$ make check
$ sudo make install
Bei einigen Systemen wird der optionale Befehl LDConfig nach der Installation benötigt.
Um die wichtige Generierungsfunktion in WolfSSH zu verwenden, muss WolfSSL mit Keygen konfiguriert werden: --enable-keygen .
Bei Verwendung von X.509 -Zertifikaten für die Benutzerauthentifizierung muss Wolfssl mit aktiviertem TLS erstellt werden. WolfSSH verwendet das Zertifikat -Manager -System von WolfSSL für X.509, einschließlich OCSP -Lookups. Um OCSP zuzulassen, add --enable-ocsp in die WolfSSL-Konfiguration.
Wenn der Großteil des WolfSSL-Codes nicht erwünscht ist, kann Wolfssl mit der Option "Nur Crypto" konfiguriert werden: --enable-cryptonly .
Weitere Build -Optionen für Wolfssl finden Sie in Kapitel 2. des Wolfsssh -Handbuchs.
Aus dem WolfSSH -Quellverzeichnis:
$ ./autogen.sh
$ ./configure --with-wolfssl=[/usr/local]
$ make
$ make check
Das autogen.sh -Skript muss nur das erste 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.
Unter Windows mit Visual Studio finden Sie in der Datei "ide/winvs/readme.md".
HINWEIS: Auf DEFAULT_WINDOW_SZ Geräten muss möglicherweise auf eine niedrigere Größe eingestellt werden. Es kann auch in Desktop -Anwendungsfällen erhöht werden, um bei großen Dateiübertragungen zu helfen. Standardmäßig werden Kanäle so eingestellt, dass sie bis zu 128 KB Daten empfangen, bevor die Meldung eines Kanalfensters angepasst wird. Ein Beispiel für die Einstellung 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 komprieren.
Die examples enthält einen EchoServer, mit dem sich jeder Client verbinden sollte. Aus dem Terminallauf:
$ ./examples/echoserver/echoserver -f
Die Option -f ermöglicht den Echo -Modus. Von einem anderen Terminallauf:
$ ssh jill@localhost -p 22222
Wenn Sie nach einem Passwort aufgefordert werden, geben Sie "up theHill" ein. Der Server sendet dem Client ein Konservenbanner:
wolfSSH Example Echo Server
In den Client eingegebene Zeichen werden vom Server auf den Bildschirm wiedergegeben. Wenn die Charaktere zweimal wiederholt werden, hat der Client lokales Echo aktiviert. Der EchoServer ist kein ordnungsgemäßes Terminal, daher funktioniert die CR/LF -Übersetzung nicht wie erwartet.
Die folgenden Steuerzeichen auslösen spezielle Aktionen im EchoServer:
Stellen Sie nach dem Klonen des Repositorys unbedingt die privaten Schlüsseln für den Benutzer vor, da ssh Ihnen ansonsten sagt, 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 den Beispiel -EchoServer kann mit einem Passwort oder öffentlichen Schlüssel erfolgen. Verwenden Sie ein Passwort in der Befehlszeile:
$ ssh -p 22222 USER@localhost
Wo die Benutzer- und Passwortpaare sind:
jill:upthehill
jack:fetchapail
Um die Authentifizierung der öffentlichen Schlüssel zu verwenden, verwenden Sie die Befehlszeile:
$ ssh -i ./keys/USER-key-TYPE.pem -p 22222 USER@localhost
Wo der Benutzer gretel oder hansel sein kann und der Typ ist rsa oder ecc .
Beachten Sie, dass der EchoServer in seiner Rückruffunktion wsUserAuth() mehrere gefälschte Konten hat. (Jack, Jill, Hansel und Gretel) Wenn der Shell -Support 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 sich irren, weil sie im System nicht existieren. Sie können dem Passwort oder der öffentlichen Schlüsselliste im EchoServer Ihren eigenen Benutzernamen hinzufügen. Dieses Konto wird in eine von dem EchoServer gestartete Shell mit den Berechtigungen des Benutzers EchoServer angemeldet.
WolfSSH ist mit einigen Beispiel -Tools zu Testzwecken und um die Interoperabilität mit anderen SSH -Implementierungen zu demonstrieren.
Der Echoserver ist das Arbeitstier von Wolfsssh. Es erlaubte ursprünglich nur einen, einen der Konservenkonto zu authentifizieren und die darin eingegebenen Zeichen wiederholte. Wenn Sie die Shell -Unterstützung aktivieren, kann dies eine Benutzerschale hervorbringen. Es benötigt einen tatsächlichen Benutzernamen auf dem Computer und eine aktualisierte Rückruffunktion der Benutzerauthentifizierung, um die Anmeldeinformationen zu validieren. Der EchoServer kann auch SCP- und SFTP -Verbindungen verarbeiten.
Das EchoServer -Tool akzeptiert die folgenden Befehlszeilenoptionen:
-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
Der Client stellt eine Verbindung zu einem SSH -Server her. Im einfachsten Modus sendet es die Zeichenfolge "Hallo, WolfSsh!" Drucken Sie die Antwort zum Server und beendet dann. Mit der Option Pseudo Terminal ist der Kunde ein echter Kunde.
Das Client -Tool akzeptiert die folgenden Befehlszeilenoptionen:
-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
Das PortFWD -Tool stellt eine Verbindung zu einem SSH -Server her und richtet einen Hörer für die lokale Portweiterleitung ein oder fordert einen Hörer für die Remote -Port -Weiterleitung an. Nach einer Verbindung endet das Werkzeug.
Das PortFWD -Tool akzeptiert die folgenden Befehlszeilenoptionen:
-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)
Der SCPClient, WolfScp, stellt eine Verbindung zu einem SSH -Server her und kopiert die angegebenen Dateien von oder zum lokalen Computer.
Das SCPClient -Tool akzeptiert die folgenden Befehlszeilenoptionen:
-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
Der SFTPClient, Wolfsftp, stellt eine Verbindung zu einem SSH -Server her und ermöglicht die Navigation des Verzeichnisses, das Abrufen und Einlegen von Dateien, das Erstellen und Entfernen von Verzeichnissen usw.
Das SFTPClient -Tool akzeptiert die folgenden Befehlszeilenoptionen:
-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 enthält serverseitige Unterstützung für SCP, das die Unterstützung beider Kopierdateien auf dem Server und Kopieren von Dateien vom Server enthält. Sowohl einzelne Datei- als auch rekursive Verzeichniskopien werden mit dem Standard -Senden- und Empfangen -Rückruf unterstützt.
Verwenden Sie die Option "WolfSSH mit SCP-Support --enable-scp Support" oder definieren Sie WOLFSSH_SCP :
$ ./configure --enable-scp
$ make
Informationen zur vollständigen API -Nutzung und -implementierungsdetails finden Sie im WolfSSH -Benutzerhandbuch.
Der WolfSSH -Beispielserver wurde eingerichtet, um eine einzelne SCP -Anforderung zu akzeptieren, und wird standardmäßig beim Kompilieren der WolfSSH -Bibliothek kompiliert. Um den Beispielserver zu starten, führen Sie aus:
$ ./examples/server/server
Standard -SCP -Befehle können auf der Clientseite verwendet werden. Im Folgenden sind einige Beispiele aufgeführt, bei denen scp den von Ihnen verwendeten SSH -Client darstellt.
So kopieren Sie eine einzelne Datei auf den Server mit dem Standard -Beispielbenutzer "Jill":
$ scp -P 22222 <local_file> [email protected]:<remote_path>
So kopieren Sie dieselbe einzelne Datei auf den Server, jedoch mit Zeitstempel und im ausführlichen Modus:
$ scp -v -p -P 22222 <local_file> [email protected]:<remote_path>
Um ein Verzeichnis rekursiv auf den Server zu kopieren:
$ scp -P 22222 -r <local_dir> [email protected]:<remote_dir>
Um eine einzige Datei vom Server auf den lokalen Client zu kopieren:
$ scp -P 22222 [email protected]:<remote_file> <local_path>
Um ein Verzeichnis rekursiv vom Server auf den lokalen Client zu kopieren:
$ scp -P 22222 -r [email protected]:<remote_dir> <local_path>
WolfSSH unterstützt die Portweiterleitung. Auf diese Weise kann der Benutzer einen verschlüsselten Tunnel auf einen anderen Server einrichten, bei dem der SSH -Client auf einem Socket und Verbindungen in diesem Socket an einen anderen Socket auf dem Server weiterleitet.
Verwenden Sie die Option --enable-fwd Build-Option-WolfSsh-Support mit Portweiterleiter-Unterstützung oder definieren Sie WOLFSSH_FWD :
$ ./configure --enable-fwd
$ make
Informationen zur vollständigen API -Nutzung und -implementierungsdetails finden Sie im WolfSSH -Benutzerhandbuch.
Das PortFWD-Beispiel-Tool erstellt einen "Direct-TCPIP" -Stilkanal. In diesen Anweisungen geht davon aus, dass der Server von OpenSSH im Hintergrund mit aktivierter Portweiterleitung ausgeführt wird. In diesem Beispiel wird der Port für den WolfSSL -Client als Anwendung an den Server weitergeleitet. Es wird davon ausgegangen, dass alle Programme in verschiedenen Terminals auf derselben Maschine ausgeführt werden.
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
Standardmäßig hört der WolfSSL -Server auf Port 11111 zu. Der Client soll versuchen, eine Verbindung zu Port 12345 herzustellen. Das PortfWD loget sich als Benutzer "Benutzername" an, öffnet einen Hörer auf Port 12345 und stellt eine Verbindung zum Server auf Port 11111. "Hallo, Wolfssl!"
Die Quelle für PortFWD bietet ein Beispiel, wie die Port -Weiterleitungsunterstützung in WolfSSH eingerichtet und verwendet wird.
Der EchoServer wird die lokale und abgelegene Portweiterleitung bearbeiten. Um mit dem SSH -Tool eine Verbindung mit einer der folgenden Befehlszeilen herzustellen. Sie können eine der SSH -Befehlszeilen von überall ausführen:
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
Auf diese Weise ermöglicht die Portweiterleitung zwischen dem WolfSSL -Client und dem Server wie im vorherigen Beispiel.
WolfSSH bietet Server- und Client -Seitenunterstützung für SFTP -Version 3. Dadurch kann der Benutzer eine verschlüsselte Verbindung zum Verwalten von Dateisystemen einrichten.
Verwenden Sie die Option "WolfSsh mit SFTP-Support --enable-sftp Support" oder definieren Sie WOLFSSH_SFTP :
$ ./configure --enable-sftp
$ make
Informationen zur vollständigen API -Nutzung und -implementierungsdetails finden Sie im WolfSSH -Benutzerhandbuch.
Der erstellte SFTP -Client befindet sich im Verzeichnis Beispiele/ SFTPCLIENT/ und im Beispiel EchoServer fungiert als SFTP -Server.
src/wolfssh$ ./examples/sftpclient/wolfsftp
Eine vollständige Liste unterstützter Befehle ist nach einer Verbindung "Hilfe" nach einer Verbindung zu sehen.
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
Ein Beispiel für eine Verbindung zu einem anderen System wäre
src/wolfssh$ ./examples/sftpclient/wolfsftp -p 22 -u user -h 192.168.1.111
Das Beispiel -EchoServer von WolfSSSH kann jetzt eine Shell für den Benutzer aufweisen, der sich anmelden möchte. Dies wurde derzeit nur auf Linux und MacOS getestet. Die Datei echoServer.c muss geändert werden, um die Anmeldeinformationen des Benutzers im Nutzerauthentifizierungs -Rückruf zu haben, oder der Rückruf der Benutzerauthentifizierung muss geändert werden, um das angegebene Kennwort zu überprüfen.
Verwenden Sie die Option "WolfSsh" mit der Shell-Unterstützung mit der Option --enable-shell -Build oder definieren Sie WOLFSSH_SHELL :
$ ./configure --enable-shell
$ make
Um diese Funktionalität auszuprobieren, können Sie den Beispiel EchoServer und Client verwenden. Führen Sie in einem Terminal Folgendes aus, um den Server zu starten:
$ ./examples/echoserver/echoserver -P <user>:junk
Und in einem anderen Terminal folgen Folgendes, um den Beispiel Client zu starten:
$ ./examples/client/client -t -u <user> -P junk
Beachten Sie, dass <user> der Benutzername des aktuellen Benutzers sein muss, der angemeldet ist.
Standardmäßig wird der EchoServer versuchen, eine Shell zu starten. Um das Echo -Testverhalten zu verwenden, geben Sie dem EchoServer die Befehlszeilenoption -f .
$ ./examples/echoserver/echoserver -f
Verwenden Sie die Shell-Funktion mit WolfSSHD Add --enable-sshd in Ihren Konfigurationsbefehl und verwenden Sie den folgenden Befehl:
$ sudo ./apps/wolfsshd/wolfsshd -D -h keys/gretel-key-ecc.pem -p 11111
Wenn es sich über eine schlechte sshd_config -Datei beschwert, kopieren Sie sie einfach in eine andere Datei und entfernen Sie die beleidigende Zeile, über die sie sich beschwert, und verwenden Sie den Befehlszeilenparameter -f , um auf die neue Datei zu verweisen.
Sie können dann mit SSH eine Verbindung zum wolfsshd -Server herstellen:
$ ssh <user>@localhost -p 11111
Beachten Sie, dass <user> der Benutzername des aktuellen Benutzers sein muss, der angemeldet ist.
WolfSsh unterstützt jetzt Curve25519 für den Key Exchange. Um diese Unterstützung zu ermöglichen, kompilieren Sie Wolfssl einfach mit Unterstützung für Wolfsssh und Curve25519.
$ cd wolfssl
$ ./configure --enable-wolfssh --enable-curve25519
Nach dem Erstellen und Installieren von WolfSSL können Sie einfach ohne Optionen konfigurieren.
$ cd wolfssh
$ ./configure
Der WolfSSH -Client und der Server verhandeln automatisch mit Curve25519.
$ ./examples/echoserver/echoserver -f
$ ./examples/client/client -u jill -P upthehill
WolfSsh unterstützt jetzt den Post-Quantum-Algorithmus ML-DSA (auch bekannt als Kyber). Es verwendet den KYBER512-Parametersatz und wird mit ECDHE über der P-256-ECC-Kurve hybridisiert.
Um diesen Schlüsselaustausch zu verwenden, müssen Sie Wolfssl in Ihrem System erstellen und installieren. Hier ist ein Beispiel für eine effektive Konfiguration:
$ ./configure --enable-wolfssh --enable-experimental --enable-kyber
Konfigurieren und erstellen Sie danach WolfSsh wie gewohnt:
$ ./configure
$ make all
Der WolfSSH-Client und der Server verhandeln automatisch über die mit ECDHE über die P-256 ECC-Kurve hybridisierte KYBER512.
$ ./examples/echoserver/echoserver -f
$ ./examples/client/client -u jill -P upthehill
Auf der Clientseite sehen Sie die folgende Ausgabe:
Server sagte: Hallo, WolfSsh!
Wenn Sie die Interoperabilität mit OpenQauntumsafes Gabel von OpenSSH erkennen möchten, können Sie die Gabel erstellen und ausführen, während der Echoserver ausgeführt wird. Laden Sie die Veröffentlichung von hier herunter:
https://github.com/open-quantum-safe/openssh/archive/refs/tags/OQS-OpenSSH-snapshot-2021-08.tar.gz
Das Folgende reicht für Erstellung und Ausführung aus:
$ 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
HINWEIS: Geben Sie bei der Aufforderung das Passwort ein, das "up theHill" lautet.
Sie können eine Textzeile eingeben, und wenn Sie die Eingabetaste drücken, wird die Zeile zurückgezogen. Verwenden Sie STRL-C, um die Verbindung zu beenden.
WolfSsh kann bei der Authentifizierung eines Benutzers X.509 -Zertifikate anstelle von nur öffentlichen Schlüssel akzeptieren.
Um WolfSsh mit X.509-Unterstützung zu kompilieren, verwenden Sie die Option --enable-certs Build-Option oder definieren Sie WOLFSSH_CERTS :
$ ./configure --enable-certs CPPFLAGS=-DWOLFSSH_NO_FPKI
$ make
In diesem Beispiel deaktivieren wir die FPKI -Überprüfung, da das enthaltene Zertifikat für "Fred" nicht über die erforderlichen FPKI -Erweiterungen verfügt. Wenn das Flag -WolfSsh_NO_FPKI entfernt wird, können Sie sehen, dass das Zertifikat abgelehnt wird.
Um ein CA -Root -Zertifikat zur Überprüfung eines Benutzerzertifikats bereitzustellen, geben Sie dem EchoServer die Befehlszeilenoption -a an.
$ ./examples/echoserver/echoserver -a ./keys/ca-cert-ecc.pem
Der EchoServer und der Client haben einen gefälschten Benutzer namens "Fred", dessen Zertifikat zur Authentifizierung verwendet wird.
Ein Beispiel für die EchoServer / Client-Verbindung mit dem Beispiel-Zertifikat-Fred-Cert.
$ ./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
Wolfsssh wird mit einem Server -Daemon und einem Befehlszeilen -Shell -Tool geliefert. Weitere Informationen finden Sie im Apps -Verzeichnis.