SSH Single Sign-On wird normalerweise mit der Authentifizierung mit öffentlichem Schlüssel und einem Authentifizierungsagenten durchgeführt. Sie können Ihren Test-VM-Schlüssel problemlos einem vorhandenen Authentifizierungsagenten hinzufügen (siehe Beispiel unten). Andere Methoden wie gssapi / kerberos existieren, sind jedoch komplexer.
sshpass
In Situationen, in denen password
die einzige Authentifizierungsmethode verfügbar ist, kann sshpass verwendet werden, um das Kennwort automatisch einzugeben. Bitte beachten Sie insbesondere den Abschnitt SICHERHEITSHINWEISE auf der Manpage . In allen drei Optionen ist das Passwort irgendwann sichtbar oder im Klartext gespeichert :
Anonymes Pipe (empfohlen von 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>&-
Es ist ziemlich umständlich in Bash, wohl einfacher mit Programmiersprachen. Ein anderer Prozess kann an Ihre Pipe / fd angehängt werden, bevor das Kennwort geschrieben wird. Das Zeitfenster ist recht kurz und beschränkt sich auf Ihre Prozesse oder Ihre Wurzel.
Umgebungsvariable
# Set your password in an environment variable
export SSHPASS='my_secret_password'
# Connect with sshpass -e
sshpass -e ssh user@host
Sie und root können die Umgebungsvariablen Ihres Prozesses (dh Ihr Passwort) lesen, während sshpass ausgeführt wird ( cat /proc/<pid>/environ | tr '\0' '\n' | grep ^SSHPASS=
). Das Zeitfenster ist viel länger, aber immer noch auf Ihre eigenen Prozesse oder Root beschränkt, nicht auf andere Benutzer.
Befehlszeilenargument (am wenigsten sicher)
sshpass -p my_secret_password ssh user@host
Dies ist praktisch, aber weniger sicher, wie in der Manpage beschrieben. Befehlszeilenargumente sind für alle Benutzer sichtbar (z ps -ef | grep sshpass
. B. ). sshpass versucht, das Argument auszublenden, aber es gibt immer noch ein Fenster, in dem alle Benutzer sehen können, dass Ihr Kennwort als Argument übergeben wurde.
Randnotiz
Setzen Sie Ihre Bash- HISTCONTROL-Variable auf ignorespace
oder ignoreboth
und stellen Sie Ihren sensiblen Befehlen ein Leerzeichen voran . Sie werden nicht in der Geschichte gespeichert.
SSH-Authentifizierung mit öffentlichem Schlüssel
# 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
Die Passphrase ist sehr wichtig. Jeder, der die private Schlüsseldatei erhält, kann sie ohne die Passphrase nicht verwenden.
Richten Sie den SSH-Authentifizierungsagenten ein
# 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)
Verbinden Sie sich wie gewohnt
ssh user@host
Der Vorteil ist, dass Ihr privater Schlüssel verschlüsselt ist und Sie die Passphrase nur einmal eingeben müssen (auch über eine sicherere Eingabemethode).