Zoeken op website

sshpass: een uitstekend hulpmiddel voor niet-interactieve SSH-aanmelding - nooit gebruiken op productieserver


In de meeste gevallen loggen Linux-systeembeheerders in op externe Linux-servers met behulp van SSH door een wachtwoord op te geven, of door een wachtwoordloze SSH-aanmelding, of op sleutels gebaseerde SSH-authenticatie.

Wat als u een wachtwoord samen met een gebruikersnaam wilt opgeven voor de SSH-prompt zelf? dit is waar sshpass te hulp schiet.

sshpass is een eenvoudige en lichtgewicht opdrachtregeltool waarmee we een wachtwoord (niet-interactieve wachtwoordauthenticatie) aan de opdrachtprompt zelf kunnen geven, zodat geautomatiseerde shellscripts kunnen worden uitgevoerd om back-ups te maken via de cron-planner.

ssh gebruikt directe TTY-toegang om er zeker van te zijn dat het wachtwoord daadwerkelijk door een interactieve toetsenbordgebruiker wordt opgegeven. Sshpass voert ssh uit in een speciale tty, waardoor het wordt misleid door te geloven dat het het wachtwoord van een interactieve gebruiker ontvangt.

Belangrijk: het gebruik van sshpass wordt als het minst veilig beschouwd, omdat het wachtwoord aan alle systeemgebruikers op de opdrachtregel wordt onthuld met een simpele “ps” commando. Ik raad ten zeerste aan om SSH-wachtwoordloze authenticatie te gebruiken.

Installeer sshpass op Linux-systemen

In op RedHat/CentOS gebaseerde systemen moet u eerst de Epel-repository op uw systeem inschakelen om deze te installeren met de yum-opdracht, zoals weergegeven.

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

Op Debian/Ubuntu en zijn afgeleiden kunt u het installeren met de opdracht apt-get, zoals weergegeven.

sudo apt-get install sshpass

Als alternatief kunt u vanaf de broncode installeren om de nieuwste versie van sshpass te hebben. Download eerst de broncode en extraheer vervolgens de inhoud van het tar-bestand en installeer het als volgt:

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 

Hoe sshpass te gebruiken onder Linux

sshpass wordt samen met ssh gebruikt. Je kunt alle sshpass gebruiksopties met volledige beschrijvingen bekijken door de onderstaande opdracht uit te voeren:

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

Zoals ik eerder al zei, is sshpass betrouwbaarder en nuttiger voor scriptdoeleinden. Bekijk de onderstaande voorbeeldopdrachten.

Log in op de externe Linux ssh-server (10.42.0.1) met de gebruikersnaam en het wachtwoord en controleer het schijfgebruik van het bestandssysteem van het externe systeem, zoals weergegeven.

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

Belangrijk: hier wordt het wachtwoord opgegeven op de opdrachtregel, wat praktisch onveilig is en het gebruik van deze optie wordt niet aanbevolen.

Om echter te voorkomen dat het wachtwoord op het scherm wordt weergegeven, kunt u de vlag -e gebruiken en het wachtwoord invoeren als een waarde van de omgevingsvariabele SSHPASS, zoals hieronder:

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

Opmerking: In het bovenstaande voorbeeld is de omgevingsvariabele SSHPASS alleen bedoeld voor tijdelijke doeleinden en wordt deze verwijderd tijdens het opnieuw opstarten.

Om de omgevingsvariabele SSHPASS permanent in te stellen, opent u het bestand /etc/profile en typt u de exportinstructie aan het begin van het bestand:

export SSHPASS='my_pass_here'

Sla het bestand op, sluit het af en voer vervolgens de onderstaande opdracht uit om de wijzigingen door te voeren:

source /etc/profile 

Aan de andere kant kunt u ook de vlag -f gebruiken en het wachtwoord in een bestand plaatsen. Zo kunt u als volgt het wachtwoord uit het bestand lezen:

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

Je kunt sshpass ook gebruiken om bestanden over te dragen met behulp van scp of om bestanden te back-uppen/synchroniseren via rsync met behulp van SSH, zoals weergegeven:

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

Voor meer gebruik raad ik u aan de sshpass manpagina door te lezen, typ:

man sshpass

In dit artikel hebben we sshpass uitgelegd, een eenvoudige tool die niet-interactieve wachtwoordverificatie mogelijk maakt. Hoewel deze tools nuttig kunnen zijn, wordt het ten zeerste aanbevolen om het veiligere authenticatiemechanisme voor openbare sleutels van ssh te gebruiken.

Laat alstublieft een vraag of opmerking achter via het feedbackgedeelte hieronder voor eventuele verdere discussies.