Introduzione
OpenSSH è una potente raccolta di strumenti per il controllo remoto e il trasferimento di dati tra computer in rete. Potrai anche conoscere alcune delle impostazioni di configurazione possibili con l’applicazione server OpenSSH e come cambiarle sul tuo sistema Ubuntu.
OpenSSH è una versione disponibile gratuitamente della famiglia di protocolli Secure Shell (SSH) per il controllo remoto o il trasferimento di file tra computer. Gli strumenti tradizionali utilizzati per eseguire queste funzioni, come telnet o rcp, non sono sicuri e trasmettono la password dell’utente in chiaro quando vengono utilizzati. OpenSSH fornisce un demone server e strumenti client per facilitare operazioni di controllo remoto e trasferimento di file sicure e crittografate, sostituendo efficacemente gli strumenti legacy.
Il componente server OpenSSH, sshd, ascolta continuamente le connessioni client da uno qualsiasi degli strumenti client. Quando si verifica una richiesta di connessione, sshd imposta la connessione corretta in base al tipo di connessione dello strumento client. Ad esempio, se il computer remoto si connette all’applicazione client ssh, il server OpenSSH imposta una sessione di controllo remoto dopo l’autenticazione. Se un utente remoto si connette a un server OpenSSH con scp, il demone OpenSSH server avvia una copia sicura dei file tra il server e il client dopo l’autenticazione. OpenSSH può utilizzare molti metodi di autenticazione, tra cui password semplice, chiave pubblica e ticket Kerberos.
Installazione
L’installazione delle applicazioni client e server OpenSSH è semplice. Per installare OpenSSH client di applicazioni sul vostro sistema Ubuntu, utilizzare il seguente comando al prompt del terminale:
sudo apt install openssh-client
Per installare il server ssh applicazione, e i relativi file di supporto, utilizzare il seguente comando al prompt del terminale:
sudo apt install openssh-server
Configurazione
È possibile configurare il comportamento predefinito del server OpenSSH applicazione, sshd, modificando il file /etc/ssh/sshd_config
. Per informazioni sulle direttive di configurazione utilizzati in questo file, è possibile visualizzare il manuale appropriato pagina con il seguente comando emesso al prompt del terminale:
man sshd_config
Ci sono molte direttive nel file di configurazione di sshd il controllo di tali cose come le impostazioni di comunicazione, e le modalità di autenticazione. Di seguito sono riportati esempi di direttive di configurazione che possono essere modificate modificando il file/etc/ssh/sshd_config
.
Tip
Prima di modificare il file di configurazione, è necessario creare una copia del file originale e proteggerlo dalla scrittura in modo da avere le impostazioni originali come riferimento e da riutilizzare se necessario.
Copiare
/etc/ssh/sshd_config
file e proteggere da scrittura con i seguenti comandi, rilasciato al prompt del terminale:sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.originalsudo chmod a-w /etc/ssh/sshd_config.original
Inoltre, poiché la perdita di un server ssh potrebbe significare perdere il vostro modo per raggiungere un server, verificare la configurazione dopo la modifica e prima di riavviare il server:
sudo sshd -t -f /etc/ssh/sshd_config
I seguenti sono esempi di direttive di configurazione è possibile modificare:
- Per impostare il OpenSSH per l’ascolto sulla porta TCP 2222 invece di quella di default la porta TCP 22, cambiare la Porta direttiva in quanto tale:
Porta 2222
- Per rendere il vostro server OpenSSH visualizzare il contenuto del tag
/etc/issue.net
file come un pre-login banner, basta aggiungere o modificare questa riga nel/etc/ssh/sshd_config
file:
Banner /etc/issue.net
Dopo aver apportato modifiche alla /etc/ssh/sshd_config
file, salvare il file e riavviare il server sshd applicazione per effetto delle modifiche utilizzando il seguente comando al prompt del terminale:
sudo systemctl restart sshd.service
Attenzione
Molte altre direttive di configurazione di sshd sono disponibile a cambiare il server di comportamento dell’applicazione adatta alle vostre esigenze. Tuttavia, se il tuo unico metodo di accesso a un server è ssh e commetti un errore nella configurazione di sshd tramite il file
/etc/ssh/sshd_config
, potresti scoprire di essere bloccato dal server al riavvio. Inoltre, se viene fornita una direttiva di configurazione errata, il server sshd potrebbe rifiutarsi di avviarsi, quindi fai molta attenzione quando modifichi questo file su un server remoto.
Le chiavi SSH
SSH consentono l’autenticazione tra due host senza la necessità di una password. L’autenticazione della chiave SSH utilizza una chiave privata e una chiave pubblica.
Per generare le chiavi, da un prompt del terminale immettere:
ssh-keygen -t rsa
Questo genererà le chiavi utilizzando l’algoritmo RSA. Al momento della stesura di questo documento, le chiavi generate avranno 3072 bit. È possibile modificare il numero di bit utilizzando l’opzione-b
. Ad esempio, per generare chiavi con 4096 bit, puoi fare:
ssh-keygen -t rsa -b 4096
Durante il processo ti verrà richiesta una password. Basta premere Invio quando viene richiesto di creare la chiave.
Per impostazione predefinita la chiave pubblica viene salvata nel file ~/.ssh/id_rsa.pub
, mentre ~/.ssh/id_rsa
è la chiave privata. Ora copia il id_rsa.pub
file host remoto e aggiungerli a un ~/.ssh/authorized_keys
inserendo:
ssh-copy-id username@remotehost
Infine, fare doppio controllare le autorizzazioni su authorized_keys
file, solo l’utente autenticato deve disporre di autorizzazioni di lettura e scrittura. Se le autorizzazioni non sono corrette cambiarle di:
chmod 600 .ssh/authorized_keys
Si dovrebbe ora essere in grado di SSH per l’host senza essere richiesto per una password.
Importa chiavi da keyserver pubblici
In questi giorni molti utenti hanno già chiavi ssh registrate con servizi come launchpad o github. Questi possono essere facilmente importati con:
ssh-import-id <username-on-remote-service>
Il prefisso lp:
è implicito e significa recuperare da launchpad, l’alternativa gh:
farà invece recuperare lo strumento da github.
Autenticazione a due fattori con U2F/FIDO
OpenSSH 8.2 aggiunto il supporto per i dispositivi di autenticazione hardware U2F / FIDO. Questi dispositivi vengono utilizzati per fornire un ulteriore livello di sicurezza in aggiunta all’autenticazione basata su chiave esistente, poiché il token hardware deve essere presente per completare l’autenticazione.
È molto semplice da usare e configurare. L’unico passo in più è generare una nuova coppia di chiavi che può essere utilizzata con il dispositivo hardware. Per questo, ci sono due tipi di chiave che possono essere utilizzati: ecdsa-sk
eed25519-sk
. Il primo ha un supporto hardware più ampio, mentre il secondo potrebbe aver bisogno di un dispositivo più recente.
Una volta generata la coppia di chiavi, può essere utilizzata come normalmente si usa qualsiasi altro tipo di chiave in openssh. L’unico requisito è che per poter utilizzare la chiave privata, il dispositivo U2F deve essere presente sull’host.
Per esempio, collegare il U2F dispositivo e generare una coppia di chiavi da utilizzare con:
$ ssh-keygen -t ecdsa-skGenerating public/private ecdsa-sk key pair.You may need to touch your authenticator to authorize key generation. <-- touch deviceEnter file in which to save the key (/home/ubuntu/.ssh/id_ecdsa_sk): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/ubuntu/.ssh/id_ecdsa_skYour public key has been saved in /home/ubuntu/.ssh/id_ecdsa_sk.pubThe key fingerprint is:SHA256:V9PQ1MqaU8FODXdHqDiH9Mxb8XK3o5aVYDQLVl9IFRo ubuntu@focal
Ora basta trasferire la parte pubblica al server ~/.ssh/authorized_keys
e si è pronti ad andare:
$ ssh -i .ssh/id_ecdsa_sk [email protected] user presence for key ECDSA-SK SHA256:V9PQ1MqaU8FODXdHqDiH9Mxb8XK3o5aVYDQLVl9IFRo <-- touch deviceWelcome to Ubuntu Focal Fossa (GNU/Linux 5.4.0-21-generic x86_64)(...)[email protected]:~$