Um servidor permite conexões SSH, mas não usa autenticação de chave pública. Não está ao meu alcance mudar isso no momento (devido a dificuldades técnicas, não organizacionais), mas vou abordar o mais rápido possível!
O que eu preciso agora é executar comandos no servidor usando uma conta antiga simples + autenticação de senha de um script . Ou seja, eu preciso fazer isso de uma maneira não interativa. É possível? E como eu faço isso?
O cliente que executará o script executa o Ubuntu Server 8.04. O servidor executa o Cygwin e o OpenSSH.
Respostas:
Existe um utilitário linux chamado
sshpass
. Ele permite que você faça exatamente o que deseja e terá uma senha de servidor como argumento de linha de comando ou de um arquivo (prefiro assim, portanto, não tenho minha senha de servidor exibida no histórico do shell) e você a usa igual a:sshpass -f file_with_password ssh user@server ls -la
Isso irá ssh em um servidor e será executado
ls -la
. Uma coisa, no entanto, você deve manualmente ssh em um servidor primeiro (se ainda não o fez), para que o servidor seja adicionado ao seu~/.ssh/known_hosts
. Se você não fizer isso,sshpass
não funcionará.fonte
SSH_ASKPASS
variável é uma solução mais genérica que funciona em qualquer sistema com OpenSSH e não requer a instalação de software adicional. Para alguns de nós (em indústrias regulamentadas), a instalação de novos softwares gera muito trabalho administrativo.SSH_ASKPASS
não funciona em todos os sistemas. Mesmo se o cliente suportar, ele não funcionará se o servidor usarkeyboard-interactive
. Na verdade, enfrentei esse problema ao escrever um script para distribuir umauthorized_keys
arquivo para várias máquinas incorporadas.Você pode usar o Expect 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 não abordarei esse ponto, pois você disse na sua pergunta que planeja usar a autenticação de chave pública o mais rápido possível!)
fonte
Depende um pouco da linguagem de script que você usa. Eu script quase tudo em python agora, onde isso é um problema. Tanto o pyssh quanto o Paramiko permitem que você simplesmente escreva a senha sem problemas.
Se você pretende fazer isso com scripts (ba) sh e usar o OpenSSH, fica mais difícil. O OpenSSH impede explicitamente que você coloque senhas na linha de comando (como todos os usuários podem ver a linha de comando usando algo como
ps -fe
, o que é um mau mojo). Nesse caso, você terá que interagir diretamente com o programa ssh e ter duas opções:fonte