#howto - Usare ssh parte 2
In questa guida vedremo come modificare il file di configurazione di ssh, salvare le nostre connessioni per non reinserire i dati e l’uso di sshpass
SSH config e SSHD config
SSH ha due file di configurazione per la connessione, come si può intuire sono uno per le connessioni in uscita (ssh) e uno per le connessioni in entrata (sshd), i percorsi sono rispettivamente:
/etc/ssh/ssh_conf(o localmente~/ssh/config)/etc/ssh/sshd_conf
Ovviamente le funzionalità di questi due file sono tantissime, troppe per elencarle tutte. Ne saranno quindi elencate alcune
Il file ssh_conf
In questo file possiamo inserire una lista di preconfigurazioni per ogni HOST a cui ci connettiamo più spesso, allo scopo di evitare di reinserire alcuni parametri come l’indirizzo ip, la porta di connessione, l’utente con il quale ci connettiamo o la chiave ssh (o l’identità).
Ogni “sezione” sarà strutturata come segue:
Host nomeAPiacere
Opzione valore
AltraOpzione altroValore
....
Vediamo le opzioni più utili.
- Sicuramente
HostName, dove potete segnare l’ip oppure il DNS a cui volete connettervi. Userse avete un determinato utente fisso a cui connetterviPortse non vi connettete alla porta 22 come specificato in maniera predefinita dal protocollo ssh- Se avete più identità all’interno della vostra cartella ssh, ovvero più chiavi, potreste trovare utile
IdentityFileper specificare con quale identità connettervi
- Se avete più identità all’interno della vostra cartella ssh, ovvero più chiavi, potreste trovare utile
ForwardX11. Il forward di X11 è un argomento un attimo più complesso, ma in poche parole è possibile avviare applicazioni grafiche remote sulla nostra macchina tramite server X. Potete specificareyesonoConnectTimeoutpuoi specificare un timeout in secondi per la tua connessione, il valore di default è0, che non significa “infinito” ma delega invece la decisione al socket TCP
Vediamo un esempio completo:
Host ilMioHost
HostName ind.iri.zzo.ip
User ilmionomeutente
Port 2052
IdentityFile ~/.ssh/unaltroid_rsa
ForwardX11 yes
ConnectionTimeout 120
Per altre informazioni, digita:
man ssh_config
Il file sshd_config
Lato ricevente abbiamo sshd_config, un file che definisce le modalità in cui è consentito che un client si connetta al tuo device tramite ssh.
Ovviamente per ogni modifica bisognerà riavviare il demone ssh, se questo era in esecuzione!
Alcune opzioni sono analoghe a quelle del file di cui sopra.
PermitRootLogin, accetta come parametriyesono, ed è ovviamente più sicuro impostare questa opzione ano, e consentire così l’accesso solo se si conosce il nome di un utente abilitato.AllowUsersconsente di creare una whitelist (si può specificare più di un nome, separando con spazi) di nomi utente abilitati all’accesso. Se abilitato anche solo un utente, tutti quelli non specificati avranno accesso negatoAllowGroupcome sopra, ma la whitelist contiene nomi di gruppi utente e non utenti singoli. Questo potrebbe permettere un approccio ancora più flessibile- Parallelamente abbiamo
DenyUserseDenyGroups, che fanno l’esatto contrario. Ovvero si può specificare una lista di utenti o gruppi che si devono vedere negati l’accesso da remoto con ssh. Portserve per cambiare eventualmente la porta di ascolto. Da impostazione predefinita è la porta 22Banneraccetta come argomento il percorso di un file di testo. Il contenuto del file viene stampato prima che l’utente possa fare l’autenticazione su ssh-
X11Forwardingse impostato ayes, permette il forwarding di finestre x11 ListenAddressconsente di specificare coppieindirizzi:portaa cui consentire la connessione, a tutte le altre sarà rifiutataMatchtramite quest’operazione è possibile creare delle configurazioni che si attivano solo per determinati utenti o host. Ad esempio creiamone una che per un utente “utentissimo” abilitaX11Forwardinge manda un Banner:
Match User utentissimo
X11Forwarding yes
Banner /etc/bannerutentissimo
Ora facciamo un esempio completo:
PermitRootLogin no
AllowUsers guest utente1
Port 2052
ListenAddress 192.168.5.2:2052
Match User utentissimo
X11Forwarding yes
Banner /etc/bannerutentissimo
Per altre informazioni, digita:
man sshd_config
Password, come evitarla
Una delle domande che ricevo più spesso quanto riguarda la connessione ssh è: “ma devo inserire ogni volta la password? Che due scatole…”
Beh esistono delle opzioni per evitarlo in effetti.
Inviare la propria chiave al server
Tramite ssh-copy-id potete copiare la vostra chiave pubblica nel server allo scopo di non inviare più la password per accedere.
Il primo passo è proprio generare la password, potete seguire la guida di linuxhub dedicata.
Ovviamente se avete protetto la vostra chiave pubblica con password alla generazione, dovrete inserire quella.
Dopo aver generate la vostra chiave potete mandarla tramite questo comando:
ssh-copy-id -i /percorso/alla/chiave.pub user@host
Se eventualmente volete cambiare porta basta specificare l’apposito parametro:
ssh-copy-id -i /percorso/alla/chiave.pub -p <numero> user@host
Normalmente la chiave viene salvata nel percorso /home/nomeutente/.ssh/id_qualcosa.pub
Come vengono conservate le autorizzazioni lato server
Lato server, se siete curiosi, le chiavi autorizzate lato server vengono conservate nel file:
/home/nomeutente/.ssh/keys_authorized
Eventuali problematiche: Lato client
Se non doveste riuscire per qualche problema a inviare la chiave, controllate localmente che la chiave abbia i giusti permessi, devono essere 600 (ovvero lettura e scrittura per l’owner, nessun permesso per gli altri), ecco come cambiare permessi nel caso:
chmod 600 ~/.ssh/id_algoritmo.pub
Eventuali problematiche: Lato server
In caso di altri problemi potete verificare le impostazioni lato server, aprite il file di configurazione di sshd ( /etc/ssh/sshd_config) e cercate le tre impostazioni:
RSAAuthenticatione verificate sia decommentata (senza carattere#) e con valoreyesPubkeyAuthenticatione verificate sia decommentata (senza carattere#) e con valoreyesAuthorizedKeysFilee verificate sia decommentata (senza carattere#) e con valore.ssh/authorized_keys
se qualcuna delle tre impostazioni non dovesse esserci, potete anche scriverla manualmente.
Se ancora dovesse dare problemi, create a mano il file delle autorizzazioni:
touch ~/.ssh/authorized_keys
sshpass
Se qualcosa dovesse andar male con il primo metodo, potete usare sshpass. Questo software (normalmente scaricabile dai repository) consente di inserire manualmente nel comando stesso la password (oppure specificarlo tramite file)
Installare sshpass su Ubuntu/Debian
apt install sshpass
Installare sshpass su Fedora
dnf install sshpass
Installare sshpass su Archlinux
pacman -S sshpass
Uso di sshpass
Potete usarlo in modalità “manuale” così:
sshpass -p "latuapassword" ssh [email protected]
Ovviamente potete usarlo anche per altri comandi che implicano ssh, come scp:
sshpass -p "latuapassword" scp file [email protected]
Ma alcuni di voi potranno pensare che scrivere manualmente la password (che poi rimane in chiaro su bash_history) non sia proprio la migliore delle idee, ecco perché sshpass offre un altra possibilità, ovvero specificare un file da cui prendere una password:
sshpass -f /percorso/file/password ssh [email protected]