GNU/Linux >> Linux Esercitazione >  >> Linux

Come eseguire i comandi Linux su un sistema remoto su SSH

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


Linux
  1. Come mandare in crash il tuo sistema:pericolosi comandi Linux

  2. Come controllare la porta aperta su un sistema Linux remoto

  3. Come usare i comandi strace e ltrace in Linux

  4. scrivi uno script di shell su ssh su una macchina remota ed esegui i comandi

  5. Come eseguire in remoto il comando ssh un comando sudo senza password

Come verificare che una porta sia aperta su un sistema Linux remoto

Come eseguire un backup Linux remoto utilizzando SSH

Come montare un filesystem Linux remoto usando SSHFS

Come generare e utilizzare la chiave SSH nel sistema Linux?

Come utilizzare SSH per connettersi a un server remoto in Linux o Windows

Come eseguire i pacchetti .run e .bin nel sistema Linux