Wyszukiwanie w witrynie

sshpass: doskonałe narzędzie do nieinteraktywnego logowania SSH - nigdy nie używaj na serwerze produkcyjnym


W większości przypadków administratorzy systemu Linux logują się do zdalnych serwerów Linux przy użyciu protokołu SSH, podając hasło, logując się przez SSH bez hasła lub uwierzytelniając SSH przy użyciu klucza.

Co się stanie, jeśli chcesz podać hasło wraz z nazwą użytkownika do monitu SSH? w tym miejscu na ratunek przychodzi sshpass.

sshpass to proste i lekkie narzędzie wiersza poleceń, które umożliwia podanie hasła (nieinteraktywne uwierzytelnianie hasłem) do samego wiersza poleceń, dzięki czemu można wykonywać automatyczne skrypty powłoki w celu tworzenia kopii zapasowych za pomocą harmonogramu cron.

ssh korzysta z prostego dostępu TTY, aby upewnić się, że hasło zostało faktycznie podane przez użytkownika klawiatury interaktywnej. Sshpass uruchamia ssh w dedykowanym tty, wprowadzając go w błąd, wierząc, że otrzymuje hasło od interaktywnego użytkownika.

Ważne: użycie sshpass uważane jest za najmniej bezpieczne, ponieważ ujawnia hasło wszystkim użytkownikom systemu w wierszu poleceń za pomocą prostego polecenie „ps”. Gorąco polecam korzystanie z uwierzytelniania SSH bez hasła.

Zainstaluj sshpass w systemach Linux

W systemach opartych na RedHat/CentOS najpierw musisz włączyć repozytorium Epel w swoim systemie, aby je zainstalować za pomocą polecenia yum, jak pokazano.

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

Na Debianie/Ubuntu i jego pochodnych można go zainstalować za pomocą polecenia apt-get, jak pokazano.

sudo apt-get install sshpass

Alternatywnie możesz zainstalować ze źródła, aby mieć najnowszą wersję sshpass, najpierw pobrać kod źródłowy, a następnie wyodrębnić zawartość pliku tar i zainstalować go w następujący sposób:

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 korzystać z sshpass w systemie Linux

sshpass jest używany razem z ssh, możesz wyświetlić wszystkie opcje użycia sshpass z pełnymi opisami, wydając poniższe polecenie:

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 wspomniałem wcześniej, sshpass jest bardziej niezawodny i przydatny do celów skryptowych, rozważ poniższe przykładowe polecenia.

Zaloguj się do zdalnego serwera ssh systemu Linux (10.42.0.1) przy użyciu nazwy użytkownika i hasła i sprawdź wykorzystanie dysku systemu plików w systemie zdalnym, jak pokazano.

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

Ważne: W tym przypadku hasło podawane jest w wierszu poleceń, co jest praktycznie niezabezpieczone i korzystanie z tej opcji nie jest zalecane.

Aby jednak zapobiec wyświetlaniu hasła na ekranie, możesz użyć flagi -e i wprowadzić hasło jako wartość zmiennej środowiskowej SSHPASS, jak poniżej:

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

Uwaga: w powyższym przykładzie zmienna środowiskowa SSHPASS jest przeznaczona wyłącznie do celów tymczasowych i zostanie usunięta podczas ponownego uruchamiania.

Aby na stałe ustawić zmienną środowiskową SSHPASS, otwórz plik /etc/profile i wpisz instrukcję eksportu na początku pliku:

export SSHPASS='my_pass_here'

Zapisz plik i wyjdź, a następnie uruchom poniższe polecenie, aby zastosować zmiany:

source /etc/profile 

Z drugiej strony możesz także użyć flagi -f i umieścić hasło w pliku. W ten sposób możesz odczytać hasło z pliku w następujący sposób:

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

Możesz także użyć sshpass do przesyłania plików przy użyciu scp lub tworzenia kopii zapasowych/synchronizacji plików przez rsync przy użyciu SSH, jak pokazano:

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

Aby uzyskać więcej korzyści, sugeruję przeczytanie strony podręcznika sshpass i wpisanie:

man sshpass

W tym artykule wyjaśniliśmy sshpass, proste narzędzie umożliwiające nieinteraktywne uwierzytelnianie hasłem. Chociaż narzędzia te mogą być pomocne, zdecydowanie zaleca się korzystanie z bezpieczniejszego mechanizmu uwierzytelniania za pomocą klucza publicznego ssh.

W celu dalszej dyskusji prosimy o pozostawienie pytania lub komentarza w sekcji opinii poniżej.