sshpass: Odličan alat za neinteraktivnu SSH prijavu - nikad se ne koristi na proizvodnom serveru


U većini slučajeva, administratori Linux sistema se prijavljuju na udaljene Linux servere koristeći SSH bilo davanjem lozinke, ili SSH prijavom bez lozinke ili SSH autentifikacijom baziranom na ključu.

Šta ako želite da unesete lozinku zajedno sa korisničkim imenom samom SSH promptu? ovdje sshpass dolazi u pomoć.

sshpass je jednostavan i lagan alat komandne linije koji nam omogućava da obezbedimo lozinku (neinteraktivnu autentifikaciju lozinke) u samu komandnu liniju, tako da se automatizovane shell skripte mogu izvršiti za pravljenje rezervnih kopija preko cron planera.

ssh koristi direktan TTY pristup kako bi se uvjerio da je lozinku zaista dostavio korisnik interaktivne tastature. Sshpass pokreće ssh u posvećenom tty-u, navodeći ga u zabludu da povjeruje da prima lozinku od interaktivnog korisnika.

Važno: Korištenje sshpass smatra se najmanje sigurnim, jer otkriva lozinku svim korisnicima sistema na komandnoj liniji jednostavnim “ps”komanda. Toplo preporučujem korištenje SSH autentifikacije bez lozinke.

Instalirajte sshpass na Linux sisteme

U sistemima baziranim na RedHat/CentOSu, prvo morate omogućiti Epel spremište na vašem sistemu da ga instalirate koristeći yum komandu kao što je prikazano.

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

Na Debian/Ubuntu i njegovim derivatima, možete ga instalirati pomoću apt-get naredbe kao što je prikazano.

sudo apt-get install sshpass

Alternativno, možete instalirati iz izvora kako biste imali najnoviju verziju sshpass, prvo preuzeti izvorni kod, a zatim izdvojiti sadržaj tar datoteke i instalirati ga na sljedeći način:

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 

Kako koristiti sshpass u Linuxu

sshpass se koristi zajedno sa ssh, možete vidjeti sve opcije korištenja sshpass s punim opisima izdavanjem naredbe ispod:

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

Kao što sam već spomenuo, sshpass je pouzdaniji i korisniji za svrhe skriptiranja, razmotrite primjer naredbi ispod.

Prijavite se na udaljeni Linux ssh server (10.42.0.1) sa korisničkim imenom i lozinkom i provjerite korištenje diska sistema datoteka na udaljenom sistemu kao što je prikazano.

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

Važno: Ovdje je lozinka navedena u komandnoj liniji koja je praktično nesigurna i korištenje ove opcije se ne preporučuje.

Međutim, kako biste spriječili prikazivanje lozinke na ekranu, možete koristiti oznaku -e i unijeti lozinku kao vrijednost varijable okruženja SSHPASS kao u nastavku:

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

Napomena: U gornjem primjeru, SSHPASS varijabla okruženja je samo za privremenu svrhu i biće uklonjena tokom ponovnog pokretanja.

Da biste trajno postavili varijablu okruženja SSHPASS, otvorite datoteku /etc/profile i otkucajte naredbu za izvoz na početku datoteke:

export SSHPASS='my_pass_here'

Sačuvajte datoteku i izađite, a zatim pokrenite naredbu ispod da izvršite promjene:

source /etc/profile 

S druge strane, možete koristiti i oznaku -f i staviti lozinku u datoteku. Na ovaj način možete pročitati lozinku iz datoteke na sljedeći način:

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

Također možete koristiti sshpass za prijenos datoteka pomoću scp-a ili backup/sync datoteka preko rsync koristeći SSH kao što je prikazano:

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

Za više upotrebe, predlažem vam da pročitate sshpass man stranicu, upišite:

man sshpass

U ovom članku smo objasnili sshpass jednostavan alat koji omogućava neinteraktivnu autentifikaciju lozinkom. Iako ovi alati mogu biti od pomoći, preporučljivo je koristiti ssh-ov sigurniji mehanizam provjere autentičnosti javnog ključa.

Molimo vas da ostavite pitanje ili komentar putem odjeljka za povratne informacije u nastavku za bilo kakvu daljnju diskusiju.