Panoramica
Molte volte abbiamo bisogno di lavorare con sistemi Linux remoti. Accediamo all'host remoto, eseguiamo il lavoro e usciamo da quella sessione. Possiamo eseguire tutte queste azioni dalla macchina locale? Sì, è possibile e questo tutorial lo dimostra con esempi esaustivi.
Esecuzione dei comandi su SSH
SSH ci consente di eseguire il comando su una macchina remota senza accedere a quella macchina. In questo tutorial discuteremo vari modi per raggiungere questo obiettivo.
Esegui comando singolo
Eseguiamo il comando uname su SSH.
$ ssh [email protected] uname
Se osservi il comando sopra, è simile al normale comando SSH con una piccola differenza. Abbiamo aggiunto il comando da eseguire (evidenziato in rosso).
Quando eseguiamo questo comando. Verrà generato il seguente output:
Linux
Esegui più comandi
Usando questa tecnica, possiamo eseguire più comandi usando una singola sessione SSH. Abbiamo solo bisogno di separare i comandi con punto e virgola (;).
$ ssh [email protected] "uname;hostname;date"
Come previsto, questi comandi genereranno il seguente output:
Linux linux-server Thu Mar 1 15:47:59 IST 2018
Esegui comando con privilegi elevati
A volte abbiamo bisogno di eseguire il comando con privilegi elevati, in tal caso possiamo usarlo con sudo.
$ ssh -t [email protected] sudo touch /etc/banner.txt
Nota che abbiamo usato '-t ' opzione con SSH, che consente l'allocazione pseudo-terminale. Il comando sudo richiede un terminale interattivo, quindi questa opzione è necessaria.
Esegui script
L'esecuzione remota non si limita solo ai comandi; possiamo anche eseguire script su SSH. Dobbiamo solo fornire il percorso assoluto dello script locale al comando SSH.
Creiamo un semplice script di shell con i seguenti contenuti e chiamiamolo system-info.sh
#!/bin/sh uname hostname
Rendi eseguibile lo script ed eseguilo sul server remoto come segue:
$ chmod +x system-info.sh $ ssh [email protected] ./system-info.sh
Come alcuni di voi avranno intuito, genererà il seguente output:
Linux linux-server
Problema di espansione delle variabili
Se dividiamo i comandi in più righe, l'espansione delle variabili non funzionerà. Vediamolo con un semplice esempio:
$ msg="Hello LinuxTechi" $ ssh [email protected] 'echo $msg'
Quando eseguiamo il comando sopra, possiamo osservare che la variabile non viene espansa.
Per risolvere questo problema, dobbiamo utilizzare -c opzione di conchiglia. Nel nostro caso lo useremo con bash come segue:
$ ssh [email protected] bash -c "'echo $msg'"
Configura sessione SSH senza password
Per impostazione predefinita, SSH richiederà l'autenticazione della password ogni volta. Questo è imposto per motivi di sicurezza. Tuttavia, a volte è fastidioso. Per ovviare a questo, possiamo utilizzare il meccanismo di autenticazione della chiave pubblica-privata.
Può essere configurato utilizzando i seguenti passaggi:
1) Genera coppia di chiavi pubblica-privata
SSH fornisce l'utilità ssh-keygen che può essere utilizzata per generare coppie di chiavi sul computer locale.
$ ssh-keygen Generating public/private rsa key pair. Enter file in which to save the key (/home/linuxtechi/.ssh/id_rsa): #press enter Enter passphrase (empty for no passphrase): #press enter Enter same passphrase again: #press enter Your identification has been saved in /home/linuxtechi/.ssh/id_rsa. Your public key has been saved in /home/linuxtechi/.ssh/id_rsa.pub.
L'output sopra mostra che le coppie di chiavi generate sono archiviate nella directory ~/.ssh.
2) Aggiungi la chiave pubblica al file ~/.ssh/authorized_keys sull'host remoto
Un modo semplice per farlo è usare il comando ssh-copy-id.
$ ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]
Nel comando sopra:
- L'opzione -i indica il file di identità
- ~/.ssh/id_rsa.pub è un file di identità
- il testo rimanente è l'utente remoto e l'IP del server remoto
NOTA: Non condividere mai la tua chiave privata con nessuno.
3) Questo è tutto. Non è così semplice? Ora possiamo eseguire il comando su SSH senza inserire la password. Verifichiamolo.
$ ssh [email protected] uname
Limitazione dell'autenticazione a chiave pubblica-privata
Sebbene l'autenticazione con chiave pubblica-privata ci renda la vita più facile, non è perfetta. Il suo principale svantaggio è; non possiamo automatizzarlo, perché l'interazione dell'utente è richiesta la prima volta. Ricordare !!! abbiamo fornito la password al comando ssh-copy-id.
Non c'è bisogno di farsi prendere dal panico, questa non è la fine del mondo. Nella prossima sezione parleremo dell'approccio che elimina questa limitazione.
Utilità sshpass
Per superare questa limitazione, possiamo usare l'utilità sshpass. Fornisce un modo non interattivo per autenticare la sessione SSH. Questa sezione ne discute in vari modi.
Installazione di sshpass
L'utilità sshpass fa parte del repository ufficiale di Ubuntu. Possiamo installarlo usando i seguenti comandi:
$ sudo apt-get update $ sudo apt-get install sshpass
Esempi
sshpass può accettare la password – come argomento, leggerla da file o tramite variabile d'ambiente. Discutiamo di tutti questi approcci.
1) Password come argomento
Possiamo fornire una password come argomento usando l'opzione –p:
$ sshpass -p 'secrete-password' ssh [email protected] uname
2) Password da file
sshpass può leggere la password dal file normale usando l'opzione -f:
$ echo "secrete-password" > password-file $ sshpass -f password-file ssh [email protected] uname
3) Password da variabile d'ambiente
In aggiunta a questo, possiamo fornire la password dalla variabile di ambiente usando l'opzione -e:
$ export SSHPASS="secrete-password" $ sshpass -e ssh [email protected] uname
Conclusione
Questo tutorial mostra vari trucchi e suggerimenti sull'esecuzione di comandi remoti su SSH. Una volta che avrai compreso questi trucchi, ti semplificherà la vita e migliorerà sicuramente la tua produttività.
Leggi anche : 9 esempi di comandi "diff" in Linux