sshpass: puikus įrankis neinteraktyviam SSH prisijungimui – niekada nenaudokite gamybos serveryje


Daugeliu atvejų „Linux“ sistemos administratoriai prisijungia prie nuotolinių „Linux“ serverių naudodami SSH pateikdami slaptažodį arba be slaptažodžio SSH prisijungimą arba raktinį SSH autentifikavimą.

Ką daryti, jei norite pateikti slaptažodį kartu su naudotojo vardu pačiam SSH raginimui? čia gelbsti sshpass.

sshpass yra paprastas ir lengvas komandų eilutės įrankis, leidžiantis pateikti slaptažodį (neinteraktyvų slaptažodžio autentifikavimą) pačiai komandų eilutei, kad būtų galima vykdyti automatinius apvalkalo scenarijus ir kurti atsargines kopijas naudojant cron planuoklį.

ssh naudoja tiesioginę TTY prieigą, kad įsitikintų, jog slaptažodį iš tikrųjų pateikia interaktyvios klaviatūros vartotojas. Sshpass paleidžia ssh tam skirtame tty, suklaidindamas jį manydamas, kad jis gauna slaptažodį iš interaktyvaus vartotojo.

Svarbu: sshpass naudojimas laikomas mažiausiai saugiu, nes jis atskleidžia slaptažodį visiems sistemos naudotojams komandinėje eilutėje naudojant paprastą komanda „ps“. Labai rekomenduoju naudoti SSH autentifikavimą be slaptažodžio.

Įdiekite sshpass Linux sistemose

Sistemose, pagrįstose RedHat/CentOS, pirmiausia turite įgalinti „Epel“ saugyklą savo sistemoje, kad ją įdiegtumėte naudodami komandą „yum“, kaip parodyta.

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

„Debian“/„Ubuntu“ ir jo dariniuose galite jį įdiegti naudodami komandą apt-get, kaip parodyta.

sudo apt-get install sshpass

Arba galite įdiegti iš šaltinio, kad gautumėte naujausią sshpass versiją, pirmiausia atsisiųskite šaltinio kodą, tada išskleiskite tar failo turinį ir įdiekite jį taip:

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 

Kaip naudoti „sshpass“ sistemoje „Linux“.

sshpass naudojamas kartu su ssh, galite peržiūrėti visas sshpass naudojimo parinktis su išsamiais aprašymais, išduodami toliau pateiktą komandą:

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

Kaip jau minėjau anksčiau, sshpass yra patikimesnis ir naudingesnis scenarijų kūrimo tikslams, apsvarstykite toliau pateiktas komandas.

Prisijunkite prie nuotolinio Linux ssh serverio (10.42.0.1) naudodami vartotojo vardą ir slaptažodį ir patikrinkite nuotolinės sistemos failų sistemos disko naudojimą, kaip parodyta.

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

Svarbu: čia slaptažodis pateikiamas komandinėje eilutėje, o tai praktiškai nesaugu, todėl šios parinkties naudoti nerekomenduojama.

Tačiau norėdami nerodyti slaptažodžio ekrane, galite naudoti vėliavėlę -e ir įvesti slaptažodį kaip aplinkos kintamojo SSHPASS reikšmę, kaip nurodyta toliau:

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

Pastaba: anksčiau pateiktame pavyzdyje aplinkos kintamasis SSHPASS skirtas tik laikinai ir bus pašalintas perkrovimo metu.

Norėdami visam laikui nustatyti aplinkos kintamąjį SSHPASS, atidarykite failą /etc/profile ir failo pradžioje įveskite eksportavimo teiginį:

export SSHPASS='my_pass_here'

Išsaugokite failą ir išeikite, tada paleiskite toliau pateiktą komandą, kad atliktumėte pakeitimus:

source /etc/profile 

Kita vertus, taip pat galite naudoti vėliavėlę -f ir įrašyti slaptažodį į failą. Tokiu būdu galite nuskaityti slaptažodį iš failo taip:

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

Taip pat galite naudoti sshpass norėdami perkelti failus naudodami scp arba atsarginės kopijos/sinchronizavimo failus per rsync naudodami SSH, kaip parodyta:

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

Norėdami daugiau naudotis, siūlau perskaityti sshpass vadovo puslapį, įveskite:

man sshpass

Šiame straipsnyje paaiškinome sshpass – paprastą įrankį, įgalinantį neinteraktyvų slaptažodžio autentifikavimą. Nors šie įrankiai gali būti naudingi, labai rekomenduojama naudoti saugesnį ssh viešojo rakto autentifikavimo mechanizmą.

Prašome palikti klausimą arba komentarą toliau pateiktoje atsiliepimų skiltyje, kad galėtumėte toliau diskutuoti.