Instalar e executar manualmente o chaveiro

Instalar e executar manualmente o chaveiro

Gostaria de usar minha chave SSH protegida por senha ao executar tarefas com parallel-ssh(e ferramentas relacionadas). No entanto, não consigo fazer isso funcionar.

Toda a documentação referente a parallel-ssh, mostra que eu deveria ser capaz de usar --askpassou -Afazer isso:

-A
--askpass
      Prompt  for  a  password  and pass it to ssh.  The password may be 
      used for either to unlock a key or for password authentication.  The 
      password is transferred in a fairly secure manner (e.g., it will not 
      show up in argument lists).  However, be aware that a root user on 
      your system could potentially intercept the password.

No entanto, quando insiro a senha da minha chave, ela não funciona:

$ parallel-ssh --hosts=machines --user=my_user --askpass \
    --timeout=0 --inline -v 'sudo apt-get update'
Warning: do not enter your password if anyone else has superuser
privileges or access to your account.
Password: 
[1] 09:59:36 [FAILURE] amritiii Exited with error code 255
Stderr: Enter passphrase for key '/home/nhaigh/.ssh/id_rsa': 
Permission denied (publickey,password).
[2] 09:59:37 [FAILURE] gbdev Exited with error code 255
Stderr: Enter passphrase for key '/home/nhaigh/.ssh/id_rsa': 
Permission denied (publickey,password).
[3] 09:59:37 [FAILURE] code Exited with error code 255
Stderr: Enter passphrase for key '/home/nhaigh/.ssh/id_rsa': 
Permission denied (publickey,password).
[4] 09:59:37 [FAILURE] apollo Exited with error code 255
Stderr: Enter passphrase for key '/home/nhaigh/.ssh/id_rsa': 
Permission denied (publickey,password).
[5] 09:59:37 [FAILURE] odin Exited with error code 255
Stderr: Enter passphrase for key '/home/nhaigh/.ssh/id_rsa': 
Permission denied (publickey,password).
[6] 09:59:37 [FAILURE] hathor Exited with error code 255
Stderr: Enter passphrase for key '/home/nhaigh/.ssh/id_rsa': 
Permission denied (publickey,password).
[7] 09:59:37 [FAILURE] ldap Exited with error code 255
Stderr: Enter passphrase for key '/home/nhaigh/.ssh/id_rsa': 
Permission denied (publickey,password).
[8] 09:59:37 [FAILURE] thor Exited with error code 255
Stderr: Enter passphrase for key '/home/nhaigh/.ssh/id_rsa': 
Permission denied (publickey,password).
[9] 09:59:37 [FAILURE] bioserver Exited with error code 255
Stderr: Enter passphrase for key '/home/nhaigh/.ssh/id_rsa': 
Permission denied (publickey,password).

Confirmei que minha chave SSH e senha funcionam em cada uma das máquinas, então não tenho ideia de como fazer isso funcionar.

Responder1

Supondo que parallel-sshe psshsejam equivalentes, então sim, o que você está tentando fazer deve funcionar perfeitamente ao canalizar a senha usando o -Aswitch.

Exemplo

Aqui está um exemplo em que me conecto a dois sistemas diferentes host1e o host2. Eu uso a -lopção psshpara fornecer um usuário padrão do root. No entanto, host2eu substituo isso no -Hswitch especificando o nome do host como user1@host2.

$ pssh -A -i -H "host1 user1@host2" -l root 'echo "hi"'
Warning: do not enter your password if anyone else has superuser
privileges or access to your account.
Password: 
[1] 21:38:00 [SUCCESS] user1@host2
hi
Stderr: 
This is a private site.  Unauthorized connections are prohibited.  
All activity may be logged.  Disconnect immediately if you object to 
this policy or are not an authorized user.

X11 forwarding request failed on channel 1
Killed by signal 1.
[2] 21:38:00 [SUCCESS] host1
hi
Stderr: 
This is a private site.  Unauthorized connections are prohibited.  
All activity may be logged.  Disconnect immediately if you object to 
this policy or are not an authorized user.

ControlSocket /home/user1/.ssh/[email protected]:22 already exists, disabling multiplexing
X11 forwarding request failed on channel 0
Killed by signal 1.

Quando o procedimento acima funcionar, você notará a saída do comando que estou executando, echo "hi".

Seu problema

O problema que você está enfrentando com uma senha no seu par de chaves SSH é devido a um bug. Este é o bug intitulado:Problema 80: Não está passando a senha?. O quarto comentário sobre esse problema mostra um patch:

excerto

#4[e-mail protegido]

mudei a linha para

  if not ( prompt.strip().lower().endswith('password:') or 
        'enter passphrase for key' in prompt.strip().lower()):

E parece que funciona

Referências

Responder2

Consegui fazer isso funcionar instalando keychainem vez de corrigir manualmente oerrocausando meus problemas.

Instalar e executar manualmente o chaveiro

# install keychain package
$ sudo apt-get install keychain

# add my key to the keychain, entering passphrase when asked
$ keychain ~/.ssh/id_rsa

# source the file generated by the above command
$ . ~/.keychain/$(uname -n)-sh

Executar comando sem entrada de senha/frase secreta

Agora, desta vez, não preciso da minha senha ao ligar, parallel-sshpois o chaveiro cuida da autenticação:

$ parallel-ssh --hosts=machines --user=my_user --timeout=0 'sudo apt-get update'
[1] 14:52:15 [SUCCESS] amritiii 
[2] 14:52:17 [SUCCESS] odin
[3] 14:52:25 [SUCCESS] gmod
[4] 14:53:11 [SUCCESS] bioserver
[5] 14:53:14 [SUCCESS] thor
[6] 14:53:14 [SUCCESS] apollo
[7] 14:53:16 [SUCCESS] gbdev
[8] 14:53:17 [SUCCESS] code
[9] 14:53:18 [SUCCESS] hathor
[10] 14:53:34 [SUCCESS] ldap

Execute o chaveiro no login

Em vez de ter que executar manualmente e adicionar sua chave ao chaveiro, basta adicionar o seguinte ao final do seu arquivo ~/.bash_profile:

$ keychain --clear $HOME/.ssh/id_rsa
$ . $HOME/.keychain/$(uname -n)-sh

Isso garante que no seu primeiro login, após uma reinicialização, você seja solicitado a fornecer a senha da sua chave. Sua chave permanecerá no chaveiro até a próxima reinicialização ou você limpará o chaveiro manualmente.

Cron Jobs usando o chaveiro

Com o acima inserido em seu ~/.bash_profilearquivo, você pode aproveitar o fato de sua chave agora estar armazenada no chaveiro, alterando o mesmo arquivo antes que seu cronjob seja executado. Por exemplo, eu tenho um script de backup que é executado às 21h todas as noites e copia coisas para um computador remoto via SSH. Esta é uma entrada no meu crontab ( crontab -e):

 0 21 * * * . $HOME/.keychain/$(uname -n)-sh; $HOME/backup_script.sh

Responder3

Use oagente sshpara autenticar automaticamente (com um nome de shell como argumento para ter as variáveis ​​de ambiente do agente definidas nesse novo shell). Adicione a chave comssh-adicionare digite sua senha apenas uma vez.

$ ssh-agent bash
$ ssh-add
Enter passphrase for /xxxx/.ssh/identity: 
$ 
$ pssh ...

informação relacionada