Jednokrotne logowanie SSH jest zwykle realizowane przy użyciu uwierzytelniania za pomocą klucza publicznego i agenta uwierzytelniania. Możesz łatwo dodać testowy klucz maszyny wirtualnej do istniejącego agenta uwierzytelniania (patrz przykład poniżej). Istnieją inne metody, takie jak gssapi / kerberos, ale są one bardziej złożone.
sshpass
W sytuacjach, w których password
jest dostępna jedyna dostępna metoda uwierzytelniania, do automatycznego wprowadzenia hasła można użyć sshpass . Proszę zwrócić szczególną uwagę na sekcję UWAGI DOTYCZĄCE BEZPIECZEŃSTWA na stronie podręcznika . We wszystkich trzech opcjach hasło jest widoczne lub przechowywane w postaci zwykłego tekstu :
Anonimowy potok (zalecany przez sshpass)
# Create a pipe
PIPE=$(mktemp -u)
mkfifo -m 600 $PIPE
# Attach it to file descriptior 3
exec 3<>$PIPE
# Delete the directory entry
rm $PIPE
# Write your password in the pipe
echo 'my_secret_password' >&3
# Connect with sshpass -d
sshpass -d3 ssh user@host
# Close the pipe when done
exec 3>&-
Jest to dość kłopotliwe w bash, prawdopodobnie łatwiejsze w językach programowania. Inny proces może dołączyć się do twojego potoku / fd przed zapisaniem hasła. Okno możliwości jest dość krótkie i ograniczone do twoich procesów lub rootowania.
Zmienna środowiskowa
# Set your password in an environment variable
export SSHPASS='my_secret_password'
# Connect with sshpass -e
sshpass -e ssh user@host
Ty i root możecie czytać zmienne środowiskowe procesu (tj. Hasło), gdy sshpass jest uruchomiony ( cat /proc/<pid>/environ | tr '\0' '\n' | grep ^SSHPASS=
). Okno możliwości jest znacznie dłuższe, ale wciąż ogranicza się do własnych procesów lub rootowania, a nie innych użytkowników.
Argument wiersza polecenia (najmniej bezpieczny)
sshpass -p my_secret_password ssh user@host
Jest to wygodne, ale mniej bezpieczne, jak opisano na stronie podręcznika. Argumenty wiersza poleceń są widoczne dla wszystkich użytkowników (np ps -ef | grep sshpass
.). sshpass próbuje ukryć argument, ale nadal jest okno, w którym wszyscy użytkownicy mogą zobaczyć twoje hasło przekazywane przez argument.
Dygresja
Ustaw zmienną HISTCONTROL bash na ignorespace
lub ignoreboth
i poprzedzaj wrażliwe polecenia spacją. Nie zostaną zapisane w historii.
Uwierzytelnianie klucza publicznego SSH
# Generate a key pair
# Do NOT leave the passphrase empty
ssh-keygen
# Copy it to the remote host (added to .ssh/authorized_keys)
ssh-copy-id user@host
Hasło jest bardzo ważne. Każdy, kto w jakiś sposób uzyska plik klucza prywatnego, nie będzie mógł go użyć bez hasła.
Skonfiguruj agenta uwierzytelniania SSH
# Start the agent
eval `ssh-agent`
# Add the identity (private key) to the agent
ssh-add /path/to/private-key
# Enter key passphrase (one time only, while the agent is running)
Połącz jak zwykle
ssh user@host
Zaletą jest to, że twój klucz prywatny jest szyfrowany i wystarczy, że wprowadzisz jego hasło tylko raz (za pomocą bezpieczniejszej metody wprowadzania).