Breve guida per SSH

Introduzione

ssh è un programma pensato per sostituire completamente rsh, rcp e famiglia fornendo una soluzione più sicura e affidabile. Con ssh tutte le comunicazioni tra server e client sono criptate.

Software necessario: ssh, sshd, scp e ssh-keygen

Il pacchetto ssh è formato da tre programmi principali:

Installazione

Sorgenti

I sorgenti di ssh sono disponibili all’indirizzo: http://www.openssh.org

Per la compilazione è necessario avere le librerie openssl, disponibili presso: http://www.openssl.org

Questi due pacchetti contengono le istruzioni per la compilazione.

Red Hat, Mandrake, Suse (RPM)

In genere i pacchetti rpm di ssh vanno sotto il nome di openssh-xxx.rpm dove xxx sta per ‘common’, ‘client’ e ‘server’. Il mio consiglio è di installarli tutti e tre e al più togliere sshd dall’elenco dei processi da eseguire all’avvio. Anche qui ci sarà la dipendenza da openssl. Per tutti questi pacchetti vi consiglio o di cercare nei CD di installazione della vostra distribuzione o di andare su RPMFind e cercare il pacchetto più adatto.

Debian e Ubuntu

Per debian, se avete configurato le sorgenti di apt da uno dei mirror http o ftp, o dai cdrom di installazione, basta eseguire (come root) il comando ‘apt-get install ssh’ che installerà tutta la suite completa, sia la parte client che server.

Uso

Per tutti i comandi descritti qui di seguito si consiglia vivamente di leggere le pagine man relative, che sono molto complete ed esaurienti, molto più della breve descrizione qui di seguito.

Uso di ssh

Per collegarsi ad un host remoto (che abbia sshd attivo, ovviamente) il comando è:

$ ssh <nome_utente>@<nome_host>

Dove è lo username dell’account sulla macchina remota e è l’indirizzo (DNS o IP) della mecchina remota.

La prima volta che ssh si connetterà ad un server, verificherà la sua chiave, e non conoscendola darà un messaggio simile a questo:

The authenticity of host '<nome_host> (<IP>)' can't be established.
DSA key fingerprint is 6f:a6:7e:6a:8f:58:f5:0b:8b:c8:fc:a6:7e:58:bf:07.
Are you sure you want to continue connecting (yes/no)?

Qui dovete rispondere ‘yes’, in modo da aggiungere quell’indirizzo alla lista dei server conosciuti.

È anche possibile utilizzare ssh per eseguire dei comandi in remoto, senza eseguire una shell interattiva, per fare questo il comando è:

$ ssh <nome_utente>@<nome_host> "<comando>"

è molto importante ricordarsi di racchiudere il con le virgolette (“”), in modo che ssh interpreti tutta la stringa e non solo la parte fino al primo spazio come comando da eseguire.

Autenticazione RSA

Per l’autenticazione ssh utilizza diversi metodi, i principali sono tramite password (come con telnet) o con chiavi pubbliche/private. Il primo metodo è molto semplice e non ha bisogno di spiegazioni. Il secondo invece è un po’ più complicato da impostare, ma poi non richiede più che l’utente digiti la sua password in ogni connessione.

Come prima cosa bisogna creare la propria coppia di chiavi, una pubblica e una privata. Questo lo si fa con il programma ssh-keygen:

$ ssh-keygen

Dopo la creazione vi verrà chiesta una passphrase (da utilizzare come password per accedere alla chiave) che può anche venir lasciata in bianco e il nome dei file in cui salvare le due chiavi, i default vanno benissimo per i nostri scopi.

La chiave privata deve essere sempre tenuta segreta, se c’è il sospetto che qualcuno abbia potuto impadronirsene, bisogna generare un nuovo paio di chiavi. Quella pubblica, invece deve venir copiata sui server a cui ci si collegherà. Normalmente il contenuto del file (tra i due creati con ssh-keygen è quello con estensione .pub) va aggiunto a ~/.ssh/authorized_keys.

Uso di scp

scp è un’estensione del comando cp che permette di copiare uno o più file con ssh su altri computer.

Per copiare il file /tmp/pippo.tar.gz dal proprio computer ad un altro (qui chiamato altrohost) la sintassi è:

$ scp /tmp/pippo.tar.gz altrohost:/tmp

Viceversa dal computer remoto al proprio:

scp altrohost:/tmp /tmp/pippo.tar.gz

Se non si usa l’autenticazione RSA verrà chiesta la password.

Funzionano le solite wildcard (* e ?) per indicare i file da copiare.

È addirittura possibile copiare file tra due macchine remote a questo modo:

$ scp primohost:/tmp/*gz secondohost:/home/luser

Se si vuole utilizzare un nome utente differente sulla macchina remota si usa la seguente sintassi:

scp /tmp/pippo.tar.gz altroutente@altrohost:/tmp
                      ^^^^^^^^^^^^