Vyhledávání na webu

sshpass: Vynikající nástroj pro neinteraktivní přihlášení SSH – nikdy nepoužívejte na produkčním serveru


Ve většině případů se správci systému Linux přihlašují ke vzdáleným serverům Linux pomocí SSH buď zadáním hesla, nebo přihlášením SSH bez hesla nebo ověřováním SSH pomocí klíče.

Co když chcete zadat heslo spolu s uživatelským jménem samotné výzvě SSH? zde přichází na pomoc sshpass.

sshpass je jednoduchý a lehký nástroj příkazového řádku, který nám umožňuje poskytnout heslo (neinteraktivní ověřování heslem) samotnému příkazovému řádku, takže lze spouštět automatizované skripty shellu pro zálohování pomocí plánovače cron.

ssh používá přímý přístup TTY, aby se ujistil, že heslo skutečně dodává uživatel interaktivní klávesnice. Sshpass spouští ssh v oddaném tty, což ho klame, aby se domníval, že dostává heslo od interaktivního uživatele.

Důležité: Používání sshpass je považováno za nejméně bezpečné, protože odhaluje heslo všem uživatelům systému na příkazovém řádku jednoduchým "ps"příkaz. Vřele doporučuji používat ověřování SSH Passwordless.

Nainstalujte sshpass na systémy Linux

V systémech založených na RedHat/CentOS musíte nejprve povolit úložiště Epel na vašem systému, abyste jej mohli nainstalovat pomocí příkazu yum, jak je znázorněno.

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

Na Debian/Ubuntu a jeho derivátech jej můžete nainstalovat pomocí příkazu apt-get, jak je znázorněno.

sudo apt-get install sshpass

Případně můžete nainstalovat ze zdroje, abyste měli nejnovější verzi sshpass, nejprve si stáhněte zdrojový kód a poté extrahujte obsah souboru tar a nainstalujte jej takto:

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 

Jak používat sshpass v Linuxu

sshpass se používá společně s ssh, všechny možnosti použití sshpass s úplným popisem můžete zobrazit zadáním příkazu níže:

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

Jak jsem již zmínil, sshpass je spolehlivější a užitečnější pro účely skriptování, zvažte níže uvedené příklady příkazů.

Přihlaste se ke vzdálenému Linux ssh serveru (10.42.0.1) pomocí uživatelského jména a hesla a zkontrolujte využití disku souborovým systémem vzdáleného systému, jak je znázorněno.

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

Důležité: Zde je heslo zadáno na příkazovém řádku, což je prakticky nezabezpečené a použití této možnosti se nedoporučuje.

Chcete-li však zabránit zobrazení hesla na obrazovce, můžete použít příznak -e a zadat heslo jako hodnotu proměnné prostředí SSHPASS, jak je uvedeno níže:

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

Poznámka: Ve výše uvedeném příkladu je proměnná prostředí SSHPASS určena pouze pro dočasné účely a během restartu bude odstraněna.

Chcete-li trvale nastavit proměnnou prostředí SSHPASS, otevřete soubor /etc/profile a na začátek souboru zadejte příkaz export:

export SSHPASS='my_pass_here'

Uložte soubor a ukončete, poté spusťte příkaz níže, abyste provedli změny:

source /etc/profile 

Na druhou stranu můžete také použít příznak -f a vložit heslo do souboru. Tímto způsobem můžete přečíst heslo ze souboru následovně:

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

Můžete také použít sshpass k přenosu souborů pomocí scp nebo souborů zálohování/synchronizace přes rsync pomocí SSH, jak je znázorněno:

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

Pro další použití vám doporučuji přečíst si manuálovou stránku sshpass, zadejte:

man sshpass

V tomto článku jsme vysvětlili sshpass, jednoduchý nástroj, který umožňuje neinteraktivní ověřování hesla. Ačkoli tyto nástroje mohou být užitečné, důrazně se doporučuje používat bezpečnější mechanismus ověřování pomocí veřejného klíče ssh.

Zanechte prosím otázku nebo komentář prostřednictvím sekce zpětné vazby níže pro případnou další diskuzi.