sshpass: Odlično orodje za neinteraktivno prijavo v SSH - Nikoli ne uporabljajte na produkcijskem strežniku


V večini primerov se sistemski skrbniki Linuxa prijavijo v oddaljene strežnike Linuxa z uporabo SSH bodisi z vnosom gesla bodisi s SSH prijavo brez gesla ali s preverjanjem pristnosti SSH s ključem.

Kaj pa, če želite samemu sporočilu SSH posredovati geslo in uporabniško ime? tu priskoči na pomoč sshpass.

sshpass je preprosto in lahko orodje ukazne vrstice, ki nam omogoča, da samemu ukaznemu pozivu zagotovimo geslo (neinteraktivno preverjanje pristnosti gesla), tako da lahko samodejno izvedemo skripte lupine za varnostno kopiranje prek cron načrtovalnika.

ssh uporablja neposreden dostop TTY, da se prepriča, da geslo dejansko priskrbi uporabnik interaktivne tipkovnice. Sshpass zažene ssh v predano tty, ga zavede, da verjame, da prejema geslo od interaktivnega uporabnika.

Pomembno: Uporaba sshpass velja za najmanj varno, saj vsem uporabnikom sistema v ukazni vrstici z enostavnim ukazom »ps« razkrije geslo. Toplo priporočam uporabo overitve SSH brez gesla.

Namestite sshpass na sisteme Linux

V sistemih, ki temeljijo na RedHat/CentOS, morate najprej yam ukazati, kot je prikazano.

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

V Debian/Ubuntu in njegovih izpeljankah ga lahko namestite z ukazom apt-get, kot je prikazano.

$ sudo apt-get install sshpass

Lahko pa namestite iz vira na najnovejšo različico sshpass, najprej prenesete izvorno kodo in nato izvlečete vsebino datoteke tar in jo namestite tako:

$ 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 uporabljati sshpass v Linuxu

sshpass se uporablja skupaj s ssh, vse možnosti uporabe sshpass si lahko ogledate s popolnimi opisi, tako da izdate spodnji ukaz:

$ 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

Kot sem že omenil, je sshpass bolj zanesljiv in uporaben za skriptiranje, upoštevajte spodnje primere ukazov.

Prijavite se na oddaljeni strežnik Linux ssh (10.42.0.1) z uporabniškim imenom in geslom ter preverite, kako oddaljeni sistem uporablja datotečni sistem, kot je prikazano.

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

Pomembno: Tukaj je geslo v ukazni vrstici, ki je praktično nezaščiteno in uporaba te možnosti ni priporočljiva.

Da pa preprečite prikaz gesla na zaslonu, lahko uporabite zastavico -e in geslo vnesete kot vrednost spremenljivke okolja SSHPASS, kot je prikazano spodaj:

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

Opomba: V zgornjem primeru je spremenljivka okolja SSHPASS samo začasna in bo med ponovnim zagonom odstranjena.

Če želite trajno nastaviti spremenljivko okolja SSHPASS, odprite datoteko/etc/profile in vnesite izjavo o izvozu na začetek datoteke:

export SSHPASS='my_pass_here'

Shranite datoteko in zapustite, nato zaženite spodnji ukaz, da izvedete spremembe:

$ source /etc/profile 

Po drugi strani pa lahko uporabite tudi zastavico -f in geslo vstavite v datoteko. Na ta način lahko geslo iz datoteke preberete na naslednji način:

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

Sshpass lahko uporabite tudi za varnostno kopiranje/sinhronizacijo datotek prek rsync z uporabo SSH, kot 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 večjo uporabo vam predlagam, da preberete stran sshpass man, vnesite:

$ man sshpass

V tem članku smo razložili preprosto orodje sshpass, ki omogoča neinteraktivno preverjanje pristnosti gesla. Čeprav so ta orodja lahko v pomoč, je zelo priporočljivo uporabiti ssh-jev varnejši mehanizem za preverjanje pristnosti javnega ključa.

Prosimo, pustite vprašanje ali komentar v spodnjem oddelku za povratne informacije za nadaljnje razprave.