
Piccola libreria client e server SSHv2 incorporabile e portatile in C con SCP, SFTP, port forwarding e scambio di chiavi post-quantistico per sistemi embedded e IoT.
Server SSH incorporabile di wolfSSL Manuale wolfSSH
wolfSSH dipende da wolfCrypt, presente come parte di wolfSSL. Quella che segue è la configurazione più semplice di wolfSSL per abilitare wolfSSH.
$ cd wolfssl
$ ./configure [OPTIONS] --enable-ssh
$ make check
$ sudo make install
Su alcuni sistemi è necessario il comando opzionale ldconfig dopo l'installazione.
Per utilizzare la funzione di generazione delle chiavi in wolfSSH, wolfSSL dovrà essere
configurato con keygen: --enable-keygen.
Quando si utilizzano certificati X.509 per l'autenticazione utente, wolfSSL deve essere
compilato con TLS abilitato. wolfSSH utilizza il sistema di gestione dei certificati di wolfSSL
per X.509, incluse le ricerche OCSP. Per consentire OCSP, aggiungere --enable-ocsp alla
configurazione di wolfSSL.
Se la maggior parte del codice di wolfSSL non è desiderata, wolfSSL può essere configurato con
l'opzione solo crittografia: --enable-cryptonly.
Ulteriori opzioni di compilazione per wolfSSL sono disponibili nel capitolo due del manuale wolfSSH.
Dalla directory sorgente di wolfSSH eseguire:
$ ./autogen.sh (se clonato da GitHub)
$ ./configure --with-wolfssl=[/usr/local]
$ make
$ make check
Lo script autogen.sh deve essere eseguito solo la prima volta dopo aver clonato
il repository. Se è già stato eseguito o si utilizza codice da un
archivio sorgente, è possibile saltarlo.
Per la compilazione su Windows con Visual Studio, vedere il file "ide/winvs/README.md".
NOTA: su dispositivi con risorse limitate potrebbe essere necessario impostare DEFAULT_WINDOW_SZ
a un valore inferiore. Può anche essere aumentato nei casi d'uso desktop
per facilitare i trasferimenti di file di grandi dimensioni. Per impostazione predefinita i canali sono impostati per ricevere
fino a 128kB di dati prima di inviare un messaggio di regolazione della finestra del canale. Un
esempio di impostazione di una dimensione della finestra per nuovi canali sarebbe il seguente
./configure CPPFLAGS="-DDEFAULT_WINDOW_SZ=16384"
Per piattaforme Linux a 32 bit è possibile aggiungere il supporto per file > 2GB compilando
con CFLAGS=-D_FILE_OFFSET_BITS=64.
La directory examples contiene un echoserver a cui qualsiasi client dovrebbe
essere in grado di connettersi. Dal terminale eseguire:
$ ./examples/echoserver/echoserver -f
L'opzione -f abilita la modalità solo echo. Da un altro terminale eseguire:
$ ssh jill@localhost -p 22222
Quando viene richiesta una password, inserire "upthehill". Il server invierà un banner predefinito al client:
wolfSSH Example Echo Server
I caratteri digitati nel client verranno ripetuti sullo schermo dal server. Se i caratteri vengono ripetuti due volte, il client ha l'echo locale abilitato. L'echoserver non è un terminale vero e proprio, quindi la traduzione CR/LF non funzionerà come previsto.
I seguenti caratteri di controllo attiveranno azioni speciali nell' echoserver:
Dopo aver clonato il repository, assicurarsi di rendere le chiavi private di test
di sola lettura per l'utente, altrimenti ssh vi dirà di farlo.
$ chmod 0600 ./keys/gretel-key-rsa.pem ./keys/hansel-key-rsa.pem \
./keys/gretel-key-ecc.pem ./keys/hansel-key-ecc.pem
L'autenticazione verso l'echoserver di esempio può essere effettuata con una password o una chiave pubblica. Per utilizzare una password, la riga di comando:
$ ssh -p 22222 USER@localhost
Dove le coppie USER e password sono:
jill:upthehill
jack:fetchapail
Per utilizzare l'autenticazione con chiave pubblica usare la riga di comando:
$ ssh -i ./keys/USER-key-TYPE.pem -p 22222 USER@localhost
Dove USER può essere gretel o hansel, e TYPE è rsa o
ecc.
Tenere presente che l'echoserver ha diversi account fittizi nella sua
funzione di callback wsUserAuth(). (jack, jill, hansel e gretel) Quando
il supporto shell è abilitato, quegli account fittizi non funzioneranno. Non
esistono nel file passwd del sistema. Gli utenti si autenticheranno,
ma il server genererà un errore perché non esistono nel sistema. È
possibile aggiungere il proprio nome utente alla lista delle password o delle chiavi pubbliche nell'
echoserver. Quell'account verrà connesso a una shell avviata dall'
echoserver con i privilegi dell'utente che esegue echoserver.
wolfSSH viene fornito con alcuni strumenti di esempio a scopo di test e per dimostrare l'interoperabilità con altre implementazioni SSH.
L'echoserver è il cavallo di battaglia di wolfSSH. Originariamente permetteva solo di autenticare uno degli account predefiniti e ripeteva i caratteri digitati. Quando si abilita il supporto shell, può avviare una shell utente. Avrà bisogno di un nome utente reale sulla macchina e di una funzione di callback di autenticazione utente aggiornata per validare le credenziali. L'echoserver può anche gestire connessioni SCP e SFTP.
Lo strumento echoserver accetta le seguenti opzioni da riga di comando:
-1 esce dopo una singola (una) connessione
-e si aspetta una chiave pubblica ECC dal client
-E usa la chiave privata ECC
-f echo dell'input
-p <num> porta su cui accettare, predefinita 22222
-N usa socket non bloccanti
-d <string> imposta la directory home per le connessioni SFTP
-j <file> carica una chiave pubblica da accettare dal peer
Il client stabilisce una connessione a un server SSH. Nella sua modalità più semplice, invia la stringa "Hello, wolfSSH!" al server, stampa la risposta, e poi esce. Con l'opzione pseudo terminale, il client sarà un vero client.
Lo strumento client accetta le seguenti opzioni da riga di comando:
-h <host> host a cui connettersi, predefinito 127.0.0.1
-p <num> porta su cui connettersi, predefinita 22222
-u <username> nome utente con cui autenticarsi (OBBLIGATORIO)
-P <password> password per il nome utente, richiesta se omessa
-e usa una chiave ecc di esempio per l'utente
-i <filename> nome file per la chiave privata dell'utente
-j <filename> nome file per la chiave pubblica dell'utente
-x esce dopo una connessione riuscita senza eseguire
lettura/scrittura
-N usa socket non bloccanti
-t usa pseudo terminale
-c <command> esegue un comando remoto e reindirizza stdin/stdout
-a Tenta di usare SSH-AGENT
Lo strumento portfwd stabilisce una connessione a un server SSH e imposta un listener per il port forwarding locale o richiede un listener per il port forwarding remoto. Dopo una connessione, lo strumento termina.
Lo strumento portfwd accetta le seguenti opzioni da riga di comando:
-h <host> host a cui connettersi, predefinito 127.0.0.1
-p <num> porta su cui connettersi, predefinita 22222
-u <username> nome utente con cui autenticarsi (OBBLIGATORIO)
-P <password> password per il nome utente, richiesta se omessa
-F <host> host da cui inoltrare, predefinito 0.0.0.0
-f <num> porta host da cui inoltrare (OBBLIGATORIO)
-T <host> host a cui inoltrare, predefinito l'host
-t <num> porta a cui inoltrare (OBBLIGATORIO)
Lo scpclient, wolfscp, stabilisce una connessione a un server SSH e copia i file specificati da o verso la macchina locale.