Appunti su Gentoo Linux.
SSH

Installazione

La sigla SSH sta per Secure Shell ed è un protocollo di rete crittografato per comunicare tra due macchine in una rete non sicura.

L'implementazione più usata del protocollo SSH sui sistemi Linux è data dal programma OpenSSH che è solitamente preinstallato. Se lo si vuole installare o aggiornare:

emerge openssh

Verranno installati diversi programmi, tra i quali figurano ovviamente un client, ssh, e un server, sshd.

Connettersi a un server

Supponiamo che i parametri per connettersi al server siano i seguenti:

Per connettersi usare il client ssh in questo modo:

ssh -p 1500 pluto@pippo.it

oppure se il server usa la porta 22

ssh pluto@pippo.it

Vi verrà richiesta la password per effettuare il login, verrà automaticamente generata una coppia di chiavi pubblica-privata che verrà usata da quel momento in poi per criptare le comunicazioni.

Un altro modo di autenticarsi, più sicuro e che evita di dover digitare la password, è quello di generare voi stessi la coppia di chiavi pubblica-privata e poi connettervi al server, come abbiamo visto sopra, per copiarci la chiave pubblica. (Questa operazione va fatta solo una volta. La stessa chiave pubblica la potete copiare in tutti i server che volete.) Quando vi connetterete, ssh verificherà che la vostra chiave privata è compatibile con quella pubblica presente nella home dell'utente del server sul quale vi volete loggare. Se il controllo è andato a buon fine la connessione verrà stabilita senza che vi sia chiesta alcuna password.

Vediamo quindi in pratica come fare. Prima generiamo la coppia di chiavi:

ssh-keygen -t rsa   

Creazione coppia chiavi, di default 
/home/utente/id_rsa 
/home/utente/id_rsa.pub

Poi va copiata la chiave pubblica sul server a cui ci si vuole connettere. Vanno cambiate anche alcune impostazioni per rendere la connessione ancora più sicura. Mentre una volta queste operazioni dovevano essere fatte manualmente connettendosi al server con ssh e password, ora esiste un programma apposito, ssh-copy-id. Vediamo la sintassi

ssh-copy-id -i /home/utente/.ssh/id_rsa.pub -p 1500 pluto@pippo.it

Vi verrà chiesta la password e di rispondere yes. Una volta finito potrete provare a connettervi al server semplicemente digitando

ssh -p 1500 pluto@pippo.it

Se tutto è andato liscio, vi loggerete senza che vi venga richiesta alcuna password.

Se avete altre macchine/utenti a cui volete connettervi, basta ridare il comando ssh-copy-id per ognuna.

Altri strumenti della suite OpenSSH

sftp

scp

rsync

Esempio backup directory server remoto su server locale con rsync:

rsync -a --delete -e 'ssh -p 1500' pluto@pippo.it:~/cartella /cartellalocale/

Configurazione

I file di configurazione per il server sshd sono ...

Protocol 2
PermitRootLogin no
PasswordAuthentication no
PermitEmptyPasswords no

Abilitare o disabilitare singoli utenti o gruppi:

AllowUsers user1 user2 ...
DenyUsers user1 user2 ...
AllowGroups group1 group2 ...
DenyGroups group1 group2 ...

Avvio del server ssh

Il sever ssh si chiama sshd (la d sta per daemon).

rc-update add sshd default
/etc/init.d/sshd start

Esecuzione di comandi al login di un utente

Se volete che venga eseguito un certo comando appena si logga uno specifico utente oppure un utente qualsiasi, allora vi interesserà rispettivamente il file .ssh/rc nella HOME oppure il file /etc/ssh/sshrc che vengono eseguiti automaticamente all'avvio. Se c'è il primo il secondo non viene eseguito.

Se volete mandare una email non appena si collega qualcuno o un utente specifico, mettende nel file opportuno questa riga:

/usr/local/bin/mail -r <email> -s 'ssh login' -t "Report: `who`"

Lo script mail è mostrato così come altre cose da sapere su come inviare delle email, alla pagina ssmtp.

Opzioni di sicurezza avanzate

Cambiare la porta di default. Di default è la 22.

Usare coppie di chiavi cifrate per l'autenticazione anziché il login interattivo con username e password.

ssh-keygen -v -t rsa

PuttyGen

Aumentare la sicurezza: Denyhosts

Usare denyhosts. Per bloccare gli indirizzi denyhosts controlla il file /var/log/sshd/current (questo è il file quando si usa metalog. Se si usa sysklogd invece il file è /var/log/messages. Si può anche usare /var/log/everything/current nel caso si usi sempre metalog). Gli indirizzi bloccati vengono messi in /etc/hosts.deny. Se volete rimuovere a mano un indirizzo prima dovete toglierlo dal log di sshd e poi da hosts.deny. Volendo non c'è bisogno di fermare denyhosts mentre si fa questa operazione.

rc-update add denyhosts default
/etc/init.d/denyhosts start

Eseguire programmi con interfaccia grafica da remoto

X11 forwarding per usare anche interfaccia grafica (esempio NXserver):

X11forwarding yes

Collegarsi da remoto tramite un server NX

NX è un protocollo per la gestione di connessioni remote di tipo grafico. In pratica è un protocollo per potersi connettere da remoto e in maniera grafica al proprio pc (su cui, nel nostro caso, è installato Linux). È ottimizzato per limitare il consumo di banda. Ed è un prodotto italiano, dalla casa di software Nomachine! Tutto il traffico di un collegamento NX passa attraverso ssh, che quindi deve essere installato sulla macchina server. Abilitate L'X11forwarding sul server, è ovviamente necessario.

Come ogni applicazione di tipo client-server, avete bisogno sia di un client che di un server! :) Per quanto riguarda il client, il migliore è quello sviluppato dalla nomachine stessa. Se avete Linux installate l'ebuild nxclient, se avete Windows o Mac scaricate il client dal sito della nomachine (i client sono tutti gratuiti).

Per quanto riguarda il server, supponiamo innanzitutto che vogliamo installarlo su una macchina Linux. I server NX per Linux sono due: uno prodotto dalla nomachine (l'ebuild è nxserver-freeedition) e l'altro è un progetto opensource chiamato FreeNX (l'ebuild è nxserver-freenx). Il secondo mi ha sempre funzionato ma è oramai un po' datato: non viene aggiornato dal 2008 e il progetto sembra fermo. L'unica limitazione di quello prodotto dalla NoMachine è che limita le connessioni a 2 soltanto. Scegliamo quindi di installare la versione gratuita del server NX della NoMachine!.

emerge nxserver-freeedition

Tutti i file relativi ad NX si trovano nella directory /usr/NX che ha la tipica struttura dell'organizzazione dei file nei sistemi Linux.

Create la chiave di autenticazione

/usr/NX/bin/nxserver --keygen
/usr/NX/bin/nxserver --start

La seconda riga non lancia alcun demone al contrario di quanto si possa pensare. Copia solo i file necessari nei posti giusti.

Ora tutto dovrebbe funzionare. Basta andare sul vostro PC client dove avete installato il client NX e provate a far partire una sessione. Se usate Xfce mettete nelle impostazioni del client che il programma da lanciare è startxfce4.

Fate molta attenzione! Se dite al client di lanciare sul server una sessione tramite un link simbolico a startx (che io avevo chiamato x) allora vedrete solo uno schermo nero e la vera sessione verrà lanciata sul server!!! Non ho però provato a vedere se il problema è startx oppure il fatto che abbia fatto un link simbolico a startx.

Due parole su come funziona NX. Nel vostro sistema ci sarà un nuovo utente, nx. Quando tenterete di connettervi al server tramite un client e un certo nome utente e password, il client instaurerà due connessioni ssh. La prima con l'utente nx (senza password, con chiave pubblica). L'utente nx DEVE quindi comparire tra gli utenti abilitati nel file sshd_config (di default tutti sono abilitati a meno che abbiate usato opzioni come AllowUsers). Questa prima connessione servirà a lanciare il server nx. Come vedete il server nx non gira come un demone, cioè in continuazione in attesa di connessioni. Ma viene fatto partire solo al momento opportuno e chiuso quando non ci sono più connessioni.

Una volta che il server è stato lanciato parte la seconda connessione, stavolta con l'utente da voi scelto. Se tutto è andato a buon fine, dopo qualche secondo comparirà il desktop del server sul vostro pc client.

Se qualcosa va storto e non riuscite più a connettervi basta ridare il comando

/usr/NX/bin/nxserver --keygen
/usr/NX/bin/nxserver --start

Per pulire le sessioni:

nxserver --cleanup

Quando si chiude una sessione di nx si hanno due possibilità. Fare il vero e proprio logout che ucciderà tutti i processi e programmi da noi lanciati oppure si può fare una sospensione. La sessione rimane aperta, ciò che viene interrotto è solo il link tra il client e il server. Per riprendere la sessione basterà riconnettersi da qualsiasi altro client e il server ci chiederà a quale tra le varie sessioni aperte vogliamo connetterci o se ne vogliamo creare una nuova.