sshpass: Un instrument excelent pentru autentificare SSH non-interactiv - Nu utilizați niciodată pe serverul de producție


În cele mai multe cazuri, administratorii de sistem Linux se conectează la serverele Linux de la distanță folosind SSH fie prin furnizarea unei parole, fie autentificare SSH fără parolă, fie autentificare SSH bazată pe chei.

Ce se întâmplă dacă doriți să furnizați o parolă împreună cu nume de utilizator promptului SSH? aici vine sshpass în ajutor.

sshpass este un instrument simplu și ușor de linie de comandă care ne permite să furnizăm o parolă (autentificare non-interactivă a parolei) promptului de comandă în sine, astfel încât scripturile shell automate să poată fi executate pentru a face copii de rezervă prin planificatorul cron.

ssh folosește acces direct TTY pentru a se asigura că parola este de fapt furnizată de un utilizator de tastatură interactivă. Sshpass rulează ssh într-un tty dedicat, îl induce în eroare să creadă că primește parola de la un utilizator interactiv.

Important: folosirea sshpass considerată a fi cea mai puțin sigură, deoarece dezvăluie parola tuturor utilizatorilor de sistem pe linia de comandă cu un simplu comanda „ps”. Recomand cu căldură să utilizați autentificarea SSH fără parolă.

Instalați sshpass pe sistemele Linux

În sistemele bazate pe RedHat/CentOS, mai întâi trebuie să activați depozitul Epel pe sistemul dvs. pentru a-l instala folosind comanda yum, așa cum se arată.

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

Pe Debian/Ubuntu și derivatele sale, îl puteți instala folosind comanda apt-get așa cum se arată.

sudo apt-get install sshpass

Alternativ, puteți instala din sursă pentru a avea cea mai recentă versiune de sshpass, mai întâi descărcați codul sursă și apoi extrageți conținutul fișierului tar și instalați-l astfel:

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 

Cum se utilizează sshpass în Linux

sshpass este folosit împreună cu ssh, puteți vedea toate opțiunile de utilizare a sshpass cu descrieri complete, lansând comanda de mai jos:

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

După cum am menționat anterior, sshpass este mai fiabil și mai util în scopuri de scriptare, luați în considerare exemplele de comenzi de mai jos.

Conectați-vă la serverul ssh Linux la distanță (10.42.0.1) cu numele de utilizator și parola și verificați utilizarea discului sistemului de fișiere al sistemului la distanță, așa cum se arată.

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

Important: aici, parola este furnizată pe linia de comandă, care este practic nesigură și nu este recomandată utilizarea acestei opțiuni.

Cu toate acestea, pentru a preveni afișarea parolei pe ecran, puteți utiliza marcatorul -e și puteți introduce parola ca valoare a variabilei de mediu SSHPASS, după cum urmează:

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

Notă: în exemplul de mai sus, variabila de mediu SSHPASS are doar scop temporar și va fi eliminată în timpul repornirii.

Pentru a seta permanent variabila de mediu SSHPASS, deschideți fișierul /etc/profile și introduceți declarația de export la începutul fișierului:

export SSHPASS='my_pass_here'

Salvați fișierul și ieșiți, apoi rulați comanda de mai jos pentru a efectua modificările:

source /etc/profile 

Pe de altă parte, puteți utiliza, de asemenea, marcatorul -f și puneți parola într-un fișier. În acest fel, puteți citi parola din fișier după cum urmează:

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

De asemenea, puteți utiliza sshpass pentru a transfera fișiere folosind scp sau fișiere de backup/sincronizare prin rsync folosind SSH, după cum se arată:

------- 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/

Pentru mai multă utilizare, vă sugerez să citiți pagina de manual sshpass, tastați:

man sshpass

În acest articol, am explicat sshpass un instrument simplu care permite autentificarea non-interactivă prin parolă. Deși, aceste instrumente pot fi utile, este foarte recomandat să utilizați mecanismul de autentificare cu cheie publică mai sigur al ssh.

Vă rugăm să lăsați o întrebare sau un comentariu prin secțiunea de feedback de mai jos pentru orice discuții ulterioare.