sshpass: izvrstan alat za neinteraktivnu SSH prijavu - nikad ne koristite na produkcijskom poslužitelju


U većini slučajeva, administratori Linux sustava prijavljuju se na udaljene Linux poslužitelje koristeći SSH bilo unosom lozinke, ili SSH prijavom bez lozinke, ili SSH autentifikacijom temeljenom na ključu.

Što ako želite unijeti lozinku uz korisničko ime samom SSH upitu? ovdje sshpass dolazi u pomoć.

sshpass je jednostavan i lagan alat naredbenog retka koji nam omogućuje da damo lozinku (neinteraktivna provjera autentičnosti lozinke) samom naredbenom retku, tako da se automatizirane skripte ljuske mogu izvršiti za izradu sigurnosnih kopija putem cron planera.

ssh koristi izravan TTY pristup kako bi se uvjerio da je lozinku stvarno donio korisnik interaktivne tipkovnice. Sshpass pokreće ssh u namjenskom tty-ju, zavaravajući ga da povjeruje da prima lozinku od interaktivnog korisnika.

Važno: Korištenje sshpass smatra se najmanje sigurnim jer otkriva zaporku svim korisnicima sustava u naredbenom retku jednostavnim naredba “ps”. Toplo preporučujem korištenje SSH autentifikacije bez lozinke.

Instalirajte sshpass na Linux sustavima

U sustavima koji se temelje na RedHat/CentOS, prvo trebate omogućiti Epel repozitorij na vašem sustavu da biste ga instalirali pomoću naredbe yum kao što je prikazano.

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

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

sudo apt-get install sshpass

Alternativno, možete instalirati iz izvora kako biste imali najnoviju verziju sshpass, prvo preuzmite izvorni kod, a zatim izdvojite sadržaj tar datoteke i instalirajte je ovako:

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 pogledati sve opcije upotrebe sshpass s potpunim 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 primjere naredbi u nastavku.

Prijavite se na udaljeni Linux ssh poslužitelj (10.42.0.1) s korisničkim imenom i lozinkom i provjerite korištenje diska datotečnog sustava udaljenog sustava kao što je prikazano.

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

Važno: Ovdje se lozinka nalazi u naredbenom retku koji je praktički nesiguran i korištenje ove opcije se ne preporučuje.

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

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

Napomena: U gornjem primjeru, varijabla okruženja SSHPASS samo je privremena i bit će uklonjena tijekom ponovnog pokretanja.

Da biste trajno postavili varijablu okruženja SSHPASS, otvorite datoteku /etc/profile i upišite izjavu o izvozu na početku datoteke:

export SSHPASS='my_pass_here'

Spremite datoteku i izađite, zatim pokrenite naredbu u nastavku da izvršite promjene:

source /etc/profile 

S druge strane, također možete koristiti zastavu -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 koristeći scp ili backup/sync datoteke 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 korištenja, predlažem vam da pročitate sshpass man stranicu, upišite:

man sshpass

U ovom smo članku objasnili sshpass jednostavan alat koji omogućuje neinteraktivnu provjeru autentičnosti lozinke. Iako ovi alati mogu biti od pomoći, toplo se preporučuje korištenje ssh-ovog sigurnijeg mehanizma provjere autentičnosti javnog ključa.

Ostavite pitanje ili komentar putem odjeljka za povratne informacije u nastavku za daljnje rasprave.