Como automatizar o login SSH com senha? Estou configurando minha VM de teste, portanto, a segurança pesada não é considerada. SSH escolhido para segurança aceitável com configuração mínima.
ex)
echo password | ssh id@server
Isso não funciona.
Lembro que fiz isso com alguns truques que alguém me orientou, mas não lembro agora o truque que usei...
Não use uma senha. Gere uma chave SSH sem senha e envie-a por push para sua VM.
Se você já possui uma chave SSH, pode pular esta etapa… Basta pressionar Entera chave e as duas senhas:
Copie suas chaves para o servidor de destino:
Agora tente fazer login na máquina, com
ssh 'id@server'
, e faça o check-in:para garantir que não adicionamos chaves extras que você não esperava.
Por fim, verifique para fazer login…
Você também pode querer usar
ssh-agent
se quiser tentar manter suas chaves protegidas com uma senha.Embora a resposta correta para sua pergunta seja sshpass ( consulte outra resposta para obter detalhes ), existe uma maneira mais segura - chaves SSH. Você está a apenas três passos da solução:
Todos os comandos a seguir estão sendo executados no lado do cliente, ou seja, sua máquina
Digite o seguinte comando para começar a gerar um par de chaves rsa :
Quando a mensagem 'Digite o arquivo no qual deseja salvar a chave' aparecer, basta deixar o nome do arquivo em branco pressionando Enter.
Quando o terminal pedir para você digitar uma senha, deixe também em branco (Aviso: leia abaixo) e pressione Enter.
Em seguida, copie o par de chaves no servidor com um comando simples :
agora você pode fazer login sem uma senha :
AVISO : Deixar as chaves SSH expostas sem criptografá-las não é uma boa prática, mesmo se você criptografar toda a sua unidade. O que é muito mais seguro é realmente inserir uma senha ao gerar chaves e, em seguida, usar o Keychain (MacOS, Linux) ou o agente SSH para lembrar a senha até você sair ou suspender ou expirar, dependendo do que você preferir.
Use esperar:
Exemplo:
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
Em situações em que
password
é o único método de autenticação disponível, o sshpass pode ser usado para inserir a senha automaticamente. Preste atenção especial à seção CONSIDERAÇÕES DE SEGURANÇA da página man . Em todas as três opções, a senha é visível ou armazenada em texto simples em algum momento :Pipe anônimo (recomendado por sshpass)
É 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 escrita. A janela de oportunidade é bastante curta e limitada aos seus processos ou raiz.
Variável de ambiente
Você e o root podem ler as variáveis de ambiente do seu processo (ou seja, sua senha) enquanto o sshpass está sendo executado (
cat /proc/<pid>/environ | tr '\0' '\n' | grep ^SSHPASS=
). A janela de oportunidade é muito maior, mas ainda limitada aos seus próprios processos ou raiz, não a outros usuários.Argumento de linha de comando (menos seguro)
Isso é conveniente, mas menos seguro, conforme descrito na página do manual. Os argumentos da linha de comando são visíveis para todos os usuários (por exemplo
ps -ef | grep sshpass
, ). sshpass tenta esconder o argumento, mas ainda há uma janela durante a qual todos os usuários podem ver sua senha passada por argumento.Nota
Defina sua variável bash HISTCONTROL para
ignorespace
ouignoreboth
e 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
A senha é muito importante. Qualquer pessoa que de alguma forma obtiver o arquivo de chave privada não poderá usá-lo sem a senha.
Configurar o agente de autenticação SSH
Conecte-se como de costume
A vantagem é que sua chave privada é criptografada e você só precisa digitar sua senha uma vez (por meio de um método de entrada mais seguro também).
Estou surpreso que ninguém tenha mencionado
plink
oputty-tools
pacote no Ubuntu:Também está disponível no Windows e a sintaxe é compatível principalmente com o cliente openssh.
Isso pode não ser útil para você, mas você pode fazer isso com Perl:
Eu prefiro
passh
https://github.com/clarkwang/passhsshpass é quebrado por design.
quando o servidor ssh não está adicionado já no meu
known_hosts
,sshpass
não vai me mostrar a mensagem para adicionar o servidor aos meus hosts conhecidos,passh
não tenho esse problema.Faça login em um servidor remoto:
Tem certeza de que não quer usar chaves SSH em vez de senhas? Dessa forma, é seguro e automático.
Dependendo de suas necessidades de automação, talvez o Ansible seja uma boa opção para você. Ele pode gerenciar muito bem coisas como solicitar senha, solicitar senha sudo, várias maneiras de alterar o uso, usar com segurança segredos criptografados (cofre).
Se isso não for adequado, sugiro o Expect, conforme sugerido em outra resposta.