desenv-web-rp.com

Login SSH com senha de texto não criptografado como parâmetro?

Preciso fazer login em um usuário que criei em um host remoto executando o Ubuntu. Não consigo usar uma chave ssh porque o login ssh acontecerá a partir de um script bash executado em um servidor ao qual não terei acesso (pense no servidor de integração contínua, como o Bamboo).

Entendo que essa não é uma prática ideal, mas quero definir o host remoto para não solicitar a senha ou poder fazer login com algo como ssh --passsword foobar [email protected], como o MySQL permite fazer logins.

Não estou encontrando isso em man ssh e estou aberto a quaisquer alternativas para contornar esse problema.

93
mmla

No Ubuntu, instale o pacote sshpass e use-o assim:

sshpass -p 'YourPassword' ssh [email protected]

sshpass também suporta a passagem da senha interativa do teclado de um arquivo ou de uma variável de ambiente, que pode ser uma opção mais apropriada em qualquer situação em que a segurança seja relevante. Vejo man sshpass para os detalhes.

160
likeitlikeit

Se sua alternativa é colocar uma senha em um script ou ssh linha de comando ou arquivo de texto sem formatação, então você está [~ # ~] muito [~ # ~] melhor usando uma tecla ssh. De qualquer forma, qualquer pessoa que tenha acesso à conta em que o script do cliente ssh está armazenado poderá usá-lo para entrar no servidor, mas pelo menos no caso de uma chave ssh, O OpenSSH o suporta adequadamente, você não concede acesso por outros meios além de ssh, é mais facilmente revogado, se necessário, etc ...

Você terá que explicar por que você tem um requisito para não usar uma chave ssh.

Considere também usar um comando forçado (command="..." no .ssh/authorized_keys) para que o cliente tenha apenas acesso para executar o comando necessário no servidor, em vez de um Shell completo.

16
Celada

Primeiro, como os outros entrevistados, recomendo apenas o uso de teclas ssh. Mas assumirei que a pessoa que controla o servidor simplesmente não permitirá que você use a autenticação de chave ssh e você deve usar a autenticação por senha.

Você pode usar o ControlMaster e o ControlPath.

Seja A o servidor ao qual você não terá acesso (pense no servidor de integração contínua como Bamboo) e C seja o host remoto executando o Ubuntu.

Agora deixe B ser um computador que você controla. Se você não puder fornecer um computador B adequado, esta resposta não funcionará.

  1. Crie um par de chaves e adicione a parte pública ao arquivo allowed_keys de B. Dê A a chave privada. Agora você pode fazer login em B a partir de A sem uma senha.
  2. Em B manualmente ssh -M -S /tmp/controlpath C e digite sua senha no prompt. Depois disso, você deverá conseguir fazer login em C de A sem uma senha ssh -S /tmp/controlpath C.

No script em A, você pode escrever ssh B ssh C dostuff.

Toda vez que você reinicia o B, você terá que restabelecer a conexão ssh -M -S /tmp/controlpath C.

10
emory