Traduzioni: Deutsch - English - Français - Italiano

DaFare(vedi originale inglese): unire (e tradurre) questa pagina e quella in francese che è più completa.

Introduzione

SSH sta per Secure Shell ed è un protocollo per login remoto sicuro e altri servizi di rete sicuri su reti non sicure1. Vedere Secure Shell su Wikipedia per maggiori informazioni generiche e ssh, lsh-client o dropbear per implementazioni software, di cui OpenSSH è il più popolare e utilizzato2. SSH rimpiazza i protocolli non cifrati telnet, rlogin e rsh e apporta molte funzionalità.

In questo documento verrà usata la suite OpenSSH, si presume che siano definite le seguenti due variabili:

remote_host=<il computer remoto>
remote_user=<il nome utente su $remote_host>

Perciò, se si desiderano usare le indicazioni fornite più avanti, come prima cosa impostare queste variabili con il nome del computer remoto e il nome utente su quel computer remoto. Poi i comandi indicati in seguito potranno essere copiati e incollati con successo. remote_host può anche essere un indirizzo IP.

Installazione

Installazione del client

Normalmente il client viene installato in modo predefinito. Se ciò non accadesse, eseguire come root:

apt-get install openssh-client

Installazione del server

Il server permette di connettersi da remoto e si installa eseguendo da root:

apt-get install openssh-server

File di configurazione

I principali file di configurazione sono nella directory /etc/ssh :

In aggiunta questa directory contiene le coppie di chiavi private/pubbliche che identificano l'host:

A partire da OpenSSH 5.73, è disponibile una nuova coppia di chiavi pubblica/privata:

A partire da OpenSSH 6.54, è disponibile una nuova coppia di chiavi pubblica/privata:

Rigenerare le chiavi dell'host

rm /etc/ssh/ssh_host_*
dpkg-reconfigure openssh-server

Login remoto

Con password

Se si desidera fare il login su $remote_host come utente $remote_user digitare semplicemente

ssh $remote_user@$remote_host

e inserire la password. Se il nome utente remoto è uguale a quello locale, si può omettere la parte $remote_user@ e scrivere solamente

ssh $remote_host

Se questa è la prima volta che si fa il login sul computer remoto, ssh chiede se si è certi di volersi connettere. Rispondere "sì" dopo aver verificato il fingerprint e poi inserire la propria password, e ssh effettua il login remoto.

Usando chiavi condivise

Una delle funzioni di ssh è l'uso di una coppia di chiavi privata/pubblica per connettersi ad un host remoto. Questo metodo permette il login ad un host remoto senza dover digitare ogni volta la propria password. Per farlo è necessario generare una coppia di chiavi privata/pubblica sulla macchina locale e depositare la chiave pubblica sull'host remoto.

Per generare la chiave si usa il programma ssh-keygen

ssh-keygen -t rsa

Questo programma genera una coppia di chiavi privata/pubblica nella directory ~/.ssh. Il programma chiede prima i file di destinazione per le chiavi, che sono in modo predefinito posizionati in ~/.ssh. Successivamente viene richiesta una passphrase.

Nota bene: è raccomandato di non lasciare la passphrase vuota. Un autore di un attacco che riuscisse ad ottenere la chiave privata potrebbe altrimenti connettersi agli host dove è stata depositata la chiave pubblica dato che la passphrase è vuota. Scegliere una passphrase lunga e complessa.

La chiave privata è id_rsa (non darla a nessun altro), la chiave pubblica è id_rsa.pub.

Si può copiare la propria chiave pubblica su un host remoto usando il comando ssh-copy-id

ssh-copy-id -i ~/.ssh/id_rsa.pub $remote_user@$remote_host

Ora ci si può connettere semplicemente all'host remoto e verrà richiesta la passphase. Una volta inserita si è connessi all'host remoto. In caso di una nuova connessione la passphrase non viene più richiesta per tutta l'intera sessione.

Garantire la sicurezza

Un server SSH è in modo predefinito relativamente sicuro. con l'aiuto di alcune opzioni di configurazione e di utilità esterne è possibile renderlo ancora più ostico per gli attaccanti (cracker).

/!\ L'uso della più recente versione del pacchetto openssh-server permette di proteggersi dalle falle di sicurezza conosciute.

Opzioni di configurazione

(!) Si dovrebbe modificare il file /etc/ssh/sshd_config per cambiare i parametri e poi riavviare il server ssh con

invoke-rc.d ssh restart

{i} Le opzioni AllowUsers e AllowGroups non migliorano la sicurezza di un server SSH. Ma, in alcuni casi, il loro uso permette di resistere un po' più a lungo ad attacchi con forza bruta.

Utilità esterne

Funzioni aggiuntive

Comandi aggiuntivi

scp

scp è un'utilità a riga di comando che permette di trasferire file tra due macchine.

scp $file_sorgente $utente_remoto@$host_remoto:$file_destinazione

scp $utente_remoto@$host_remoto:$file_sorgente $file_destinazione

sftp

[da scrivere in futuro]

text mode

[da scrivere in futuro]

graphical mode

[da scrivere in futuro]

clusterssh

[da scrivere in futuro]

ssh-agent e ssh-add

ssh-agent è un'applicazione utile per gestire le chiavi private e le loro password. Dovrebbe essere invocato all'inizio della sessione, in una bourne shell in modo simile a questo:

eval `ssh-agent -s`

o in una shell C:

eval `ssh-agent -c`

Quando una chiave privata è necessaria per la prima volta, viene chiesta all'utente la sua password e ssh-agent ricorda la chiave. Successivamente, ogni volta che quella chiave private viene usata, la password non viene più chiesta.

ssh-add può essere usato per gestire le chiavi ricordate:

Portachiavi

Keychain, fornito dal pacchetto keychain, è uno script di shell che permette di usare l'agente ssh in sessioni multiple sullo stesso computer. Di fatto, dopo il primo avvio ssh-agent crea un socket permanente che permette la comunicazione con ssh. Questo socket è referenziato solo nell'ambiente della sessione in cui l'agente è stato avviato. Keychain permette di rilevare l'agente e propagare l'accesso a tale agente ad altre sessioni: ciò permette di usare su una macchina una singola istanza di ssh-agent per utente.

ssh-askpass

ssh-askpass è un'utilità per semplificare il processo di richiesta della password di una chiave privata quando essa viene usata. Esistono diverse implementazioni:

libpam-usb

libpam-usb è un'utilità (disponibile solo fino a Debian Jessie) che permette l'autenticazione con una chiavetta USB. Questo pacchetto include un'applicazione utile: pamusb-agent. Questa utilità, una volta configurata correttamente, permette di caricare le chiavi SSH presenti sulla chiavetta USB una volta che questa è connessa e di scaricarle quando viene disconnessa.


Comandi in remoto

Se si desidera eseguire un solo comando sul computer remoto, non è necessario fare il login. Si può semplicemente dire a ssh di eseguire il comando senza login, ad esempio:

ssh $remote_user@$remote_host 'ls *.txt'

elenca tutti i file con estensione .txt sul computer remoto. Questo comando funziona con le virgolette singole '...' come nell'esempio, con le virgolette doppie "..." e senza virgolette. Ci possono essere differenze tra le tre cose, però, anche se non verranno documentate in questa pagina.

Login SSH in Debian da un altro sistema operativo

SSH e la sicurezza

Server SSH

Client SSH

Risoluzione dei problemi

Errore "OpenSSL version mismatch. Built against 1000105f, you have 10001060"

Se si ottiene un messaggio di errore come questo quando si avvia il demone "ssh" è necessario eseguire:

apt-get install openssh-server openssh-client

Vedre anche la segnalazione di bug.

Mantenere vive connessioni SSH

Per ragioni di sicurezza, una connessione SSH viene in modo predefinito chiusa automaticamente dopo un intervallo di tempo prefissato. In alcuni casi però può essere desiderabile mantenere la connessione aperta. Come nel caso di archiviazione cloud su connessione SSH.

Per server Debian 7.x

Passi per mantenere attiva una connessione SSH.

  1. Sul server SSH modificare il file "/etc/ssh/sshd_config"

  2. Aggiungere quanto segue in fondo a tale file

    # Mantenere la connessione SSH attiva inviando ogni 300 secondi un piccolo pacchetto keep-alive al server in modo da usare la connessione SSH. 300 secondi equivalgono a 5 minuti.
    ClientAliveInterval 300
     
    # Disconnettere il client dopo 3333 richieste "ClientAlive". Il formato è (ClientAliveInterval x ClientAliveCountMax). In questo esempio (300 secondi x 3333) = ~999.900 secondi = ~16.665 minuti = ~277 ore = ~11 giorni.
    ClientAliveCountMax 3333
  3. Come utente root riavviare il servizio SSH

    service sshd restart

    Notare che sui sistemi Debian recenti (es. Wheezy 7 aggiornata al novembre 2015), il comando descritto sopra non funziona più e restituisce l'errore:

    sudo service sshd restart
    sshd: unrecognized service

    Tuttavia questo funziona:

    sudo service ssh restart
    [ ok ] Restarting OpenBSD Secure Shell server: sshd.

Uno dei migliori consigli riguardo la sicurezza è di avere password robuste e di applicare gli aggiornamenti di sicurezza il prima possibile. Ma cosa succede se i propri utenti, anche se hanno password robuste, lasciano la propria sessione SSH aperta e non supervisionata? Ciò significa che chiunque può avvicinarsi al loro PC e semplicemente usare il comando passwd, cambiare la password e perciò ottenere accesso al server. Usare il buon senso.