Il single sign-on SSH si ottiene in genere con l'autenticazione con chiave pubblica e un agente di autenticazione. È possibile aggiungere facilmente la chiave della VM di prova a un agente di autenticazione esistente (vedere l'esempio seguente). Esistono altri metodi come gssapi / kerberos ma sono più complessi.
sshpass
In situazioni in cui password
è disponibile l'unico metodo di autenticazione, è possibile utilizzare sshpass per inserire automaticamente la password. Prestare particolare attenzione alla sezione CONSIDERAZIONI SULLA SICUREZZA della pagina man . In tutte e tre le opzioni, la password è visibile o memorizzata in testo normale ad un certo punto :
Pipa anonima (consigliata da 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>&-
È piuttosto ingombrante in bash, probabilmente più facile con i linguaggi di programmazione. Un altro processo potrebbe essere collegato alla pipe / fd prima che la password venga scritta. La finestra di opportunità è piuttosto breve e limitata ai tuoi processi o root.
Variabile d'ambiente
# Set your password in an environment variable
export SSHPASS='my_secret_password'
# Connect with sshpass -e
sshpass -e ssh user@host
Tu e root potete leggere le variabili d'ambiente del vostro processo (cioè la vostra password) mentre sshpass è in esecuzione ( cat /proc/<pid>/environ | tr '\0' '\n' | grep ^SSHPASS=
). La finestra di opportunità è molto più lunga ma ancora limitata ai propri processi o root, non ad altri utenti.
Argomento della riga di comando (meno sicuro)
sshpass -p my_secret_password ssh user@host
Questo è conveniente ma meno sicuro come descritto nella pagina man. Gli argomenti della riga di comando sono visibili a tutti gli utenti (ad es ps -ef | grep sshpass
.). sshpass tenta di nascondere l'argomento, ma c'è ancora una finestra durante la quale tutti gli utenti possono vedere la tua password passata per argomento.
Nota a margine
Impostare la bash variabile HISTCONTROL a ignorespace
o ignoreboth
e prefisso i comandi sensibili con uno spazio. Non saranno salvati nella storia.
Autenticazione con chiave pubblica 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
La passphrase è molto importante. Chiunque ottenga in qualche modo il file della chiave privata non sarà in grado di usarlo senza la passphrase.
Imposta l'agente di autenticazione 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)
Connetti come al solito
ssh user@host
Il vantaggio è che la tua chiave privata è crittografata e devi solo inserire la sua passphrase una volta (anche tramite un metodo di input più sicuro).