O logon único SSH geralmente é obtido com autenticação de chave pública e um agente de autenticação. Você pode adicionar facilmente sua chave de VM de teste a um agente de autenticação existente (veja o exemplo abaixo). Existem outros métodos, como gssapi / kerberos, mas são mais complexos.
sshpass
Nas situações em que password
é o único método de autenticação disponível, o sshpass pode ser usado para inserir automaticamente a senha. Por favor, preste atenção especial à seção CONSIDERAÇÕES DE SEGURANÇA da página de manual . Nas três opções, a senha é visível ou armazenada em texto sem formatação em algum momento :
Canal anônimo (recomendado pelo 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>&-
É bastante complicado no bash, sem dúvida mais fácil com linguagens de programação. Outro processo pode ser anexado ao seu pipe / fd antes que a senha seja gravada. A janela de oportunidade é bastante curta e limitada aos seus processos ou raiz.
Variável de ambiente
# Set your password in an environment variable
export SSHPASS='my_secret_password'
# Connect with sshpass -e
sshpass -e ssh user@host
Você e o root podem ler as variáveis de ambiente do seu processo (por exemplo, sua senha) enquanto o sshpass está em execução ( cat /proc/<pid>/environ | tr '\0' '\n' | grep ^SSHPASS=
). A janela de oportunidade é muito mais longa, mas ainda limitada aos seus próprios processos ou raiz, e não a outros usuários.
Argumento da linha de comando (menos seguro)
sshpass -p my_secret_password ssh user@host
Isso é conveniente, mas menos seguro, conforme descrito na página de manual. Os argumentos da linha de comando são visíveis para todos os usuários (por exemplo ps -ef | grep sshpass
). O sshpass tenta ocultar o argumento, mas ainda existe uma janela durante a qual todos os usuários podem ver sua senha passada pelo argumento.
Nota
Defina sua variável bash HISTCONTROL como ignorespace
ou ignoreboth
prefixe seus comandos sensíveis com um espaço. Eles não serão salvos na história.
Autenticação de chave pública 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
A senha é muito importante. Qualquer pessoa que, de alguma forma, obtenha o arquivo de chave privada não poderá usá-lo sem a senha.
Configurar o agente de autenticação 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)
Conecte-se como de costume
ssh user@host
A vantagem é que sua chave privada é criptografada e você só precisa digitar sua senha uma vez (também através de um método de entrada mais seguro).