Ricerca nel sito web

sshpass: uno strumento eccellente per l'accesso SSH non interattivo: non utilizzare mai su server di produzione


Nella maggior parte dei casi, gli amministratori di sistema Linux accedono ai server Linux remoti utilizzando SSH fornendo una password, un accesso SSH senza password o un'autenticazione SSH basata su chiave.

Cosa succede se desideri fornire una password insieme al nome utente al prompt SSH stesso? è qui che sshpass viene in soccorso.

sshpass è uno strumento da riga di comando semplice e leggero che ci consente di fornire una password (autenticazione della password non interattiva) al prompt dei comandi stesso, in modo che gli script di shell automatizzati possano essere eseguiti per eseguire i backup tramite lo scheduler cron.

ssh utilizza l'accesso TTY diretto per assicurarsi che la password sia effettivamente fornita da un utente con tastiera interattiva. Sshpass esegue ssh in una tty dedicata, inducendolo erroneamente a credere che stia ricevendo la password da un utente interattivo.

Importante: l'utilizzo di sshpass è considerato meno sicuro, poiché rivela la password a tutti gli utenti del sistema sulla riga di comando con un semplice comando "ps". Consiglio vivamente di utilizzare l'autenticazione SSH Passwordless.

Installa sshpass su sistemi Linux

Nei sistemi basati su RedHat/CentOS, devi prima abilitare il repository Epel sul tuo sistema per installarlo utilizzando il comando yum come mostrato.

yum install sshpass
dnf install sshpass    [On Fedora 22+ versions]

Su Debian/Ubuntu e suoi derivati, puoi installarlo usando il comando apt-get come mostrato.

sudo apt-get install sshpass

In alternativa, puoi eseguire l'installazione dal sorgente per avere l'ultima versione di sshpass, prima scarica il codice sorgente, quindi estrai il contenuto del file tar e installalo in questo modo:

wget http://sourceforge.net/projects/sshpass/files/latest/download -O sshpass.tar.gz
tar -xvf sshpass.tar.gz
cd sshpass-1.06
./configure
sudo make install 

Come utilizzare sshpass in Linux

sshpass viene utilizzato insieme a ssh, puoi visualizzare tutte le opzioni di utilizzo di sshpass con le descrizioni complete emettendo il comando seguente:

sshpass -h
Usage: sshpass [-f|-d|-p|-e] [-hV] command parameters
   -f filename   Take password to use from file
   -d number     Use number as file descriptor for getting password
   -p password   Provide password as argument (security unwise)
   -e            Password is passed as env-var "SSHPASS"
   With no parameters - password will be taken from stdin

   -h            Show help (this screen)
   -V            Print version information
At most one of -f, -d, -p or -e should be used

Come ho detto prima, sshpass è più affidabile e utile per scopi di scripting, considera i comandi di esempio seguenti.

Accedi al server Linux ssh remoto (10.42.0.1) con nome utente e password e controlla l'utilizzo del disco del file system del sistema remoto come mostrato.

sshpass -p 'my_pass_here' ssh [email  'df -h' 

Importante: qui la password viene fornita sulla riga di comando, il che è praticamente insicuro e l'utilizzo di questa opzione non è consigliabile.

Tuttavia, per evitare di mostrare la password sullo schermo, puoi utilizzare il flag -e e inserire la password come valore della variabile d'ambiente SSHPASS come di seguito:

export SSHPASS='my_pass_here'
echo $SSHPASS
sshpass -e ssh [email  'df -h' 

Nota: nell'esempio sopra, la variabile di ambiente SSHPASS è solo per scopo temporaneo e verrà rimossa durante il riavvio.

Per impostare in modo permanente la variabile di ambiente SSHPASS, apri il file /etc/profile e digita l'istruzione export all'inizio del file:

export SSHPASS='my_pass_here'

Salvare il file ed uscire, quindi eseguire il comando seguente per rendere effettive le modifiche:

source /etc/profile 

D'altra parte, puoi anche usare il flag -f e inserire la password in un file. In questo modo, puoi leggere la password dal file come segue:

sshpass -f password_filename ssh [email  'df -h'

Puoi anche utilizzare sshpass per trasferire file utilizzando scp o eseguire il backup/sincronizzazione dei file su rsync utilizzando SSH come mostrato:

------- Transfer Files Using SCP ------- 
scp -r /var/www/html/example.com --rsh="sshpass -p 'my_pass_here' ssh -l aaronkilik" 10.42.0.1:/var/www/html

------- Backup or Sync Files Using Rsync -------
rsync --rsh="sshpass -p 'my_pass_here' ssh -l aaronkilik" 10.42.0.1:/data/backup/ /backup/

Per un maggiore utilizzo, ti suggerisco di leggere la pagina man di sshpass, digitare:

man sshpass

In questo articolo abbiamo spiegato sshpass un semplice strumento che consente l'autenticazione della password non interattiva. Sebbene questi strumenti possano essere utili, si consiglia vivamente di utilizzare il meccanismo di autenticazione a chiave pubblica più sicuro di ssh.

Per favore, lascia una domanda o un commento tramite la sezione feedback qui sotto per eventuali ulteriori discussioni.