Conecte-se por SSH e digite a senha automaticamente, sem usar uma chave pública

18

Um servidor permite conexões SSH, mas não usa autenticação de chave pública. Não está em meu poder mudar isso no momento (devido a dificuldades técnicas, não organizacionais), mas vou começar assim que possível!

O que eu preciso agora é executar comandos no servidor usando autenticação antiga conta + senha de um script . Ou seja, eu preciso fazer isso de uma maneira não interativa. É possível? E como faço isso?

O cliente que executará o script executa o Ubuntu Server 8.04. O servidor executa o Cygwin e o OpenSSH.

    
por Deleted 14.04.2010 / 20:15

3 respostas

20

Existe um utilitário do Linux chamado sshpass . Ele permite que você faça exatamente o que você quer e terá uma senha do servidor como um argumento de linha de comando, ou de um arquivo (eu prefiro assim, não tenho a senha do meu servidor no histórico do shell) e você o usa assim:

sshpass -f file_with_password ssh user@server ls -la

Isso será ssh em um servidor e executará ls -la . Uma coisa, no entanto, é que você precisa fazer ssh manualmente em um servidor primeiro (se ainda não o fez), então o servidor é adicionado ao seu ~/.ssh/known_hosts . Se você não fizer isso, sshpass não funcionará.

    
por 15.04.2010 / 19:13
7

Você pode usar Esperar para fazer isso. Obviamente, isso não é preferível do ponto de vista de segurança, porque exigirá que você use um script que contenha sua senha em texto sem formatação. (Mas eu não vou insistir nesse ponto desde que você disse em sua pergunta que você planeja usar a autenticação de chave pública o mais rápido possível!)

    
por 14.04.2010 / 20:19
5

Depende um pouco da linguagem de script que você usa. Eu script quase tudo em python agora, onde isso não é um problema. Tanto o pyssh quanto o Paramiko permitem que você simplesmente faça o script da senha sem problemas.

Se você pretende fazer isso com scripts (ba) sh e usar o OpenSSH, fica mais difícil. O OpenSSH o impede explicitamente de colocar senhas na linha de comando (já que todos os usuários podem ver a linha de comando usando algo como ps -fe , o que é um mau mojo). Neste caso você terá que interagir diretamente com o programa ssh e ter duas opções:

  • Você pode escrever uma quantidade considerável de código de suporte, usando algo como o Expect.
  • Você faz um hack usando a variável SSH_ASKPASS, informando para chamar um aplicativo que retorna sua senha e executa tudo como um trabalho em lote para impedir que ele seja lido no terminal.
por 14.04.2010 / 20:37

Tags