SSH: Possível encaminhar a autenticação de senha para o comando executado na máquina remota?

1

Um rápido histórico sobre o que exatamente estou tentando fazer:

Eu frequentemente tenho que configurar a autenticação de chave pública de clientes remotos para minha máquina local. Eu estou tentando automatizar um pouco esse processo, sendo capaz de executar um script que via SSH faz 2 coisas seqüencialmente:

1) Via SSH autenticado por senha, use ssh-keygen na máquina remota e gere uma chave RSA e salve-a em um ponto predefinido

2) Leve a chave na máquina remota e configure-a para que a máquina remota possa autenticar a chave de pub com a máquina local.

Eu tentei fazer # 2 da mesma forma como fiz # 1 com o uso de ssh-copy-id em uma sessão ssh. No entanto, recebo apenas uma solicitação de senha, o prompt para a conexão SSH inicial. O ssh-copy-id requer uma autenticação de senha neste ponto, no entanto, o SSH não envia de volta o prompt de senha e, em vez disso, eu recebo uma saída como a seguinte:

[localUser@localhost ~]$ ssh remoteUser@remoteIP ssh-copy-id -i ~/authenticationKey localuser@localhost
remoteUser@remoteIP's password: [ENTER]
Permission denied, please try again.
Permission denied, please try again.
Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).

Devo notar aqui também, que através de mensagens de depuração eu já determinei que o comando ssh está se conectando com sucesso. As mensagens de permissão negada vêm de ssh-copy-id e não de ssh.

Parece-me que é um problema com o prompt de senha não propagando de volta para o shell do cliente remoto, ou que o SSH está tentando enviar uma senha que eu não sei (ou pelo menos não funciona)

Suponho que eu poderia fazê-lo manualmente como uma solução usando o scp, mas também estou parcialmente interessado em saber se há uma maneira de fazer isso, ou pelo menos o que o ssh está fazendo aqui.

Obrigado por qualquer ajuda que você possa me dar!

-Verifique H.

    
por Bleck H. 19.04.2013 / 02:05

1 resposta

2

Seria mais simples usar ssh-copy-id localmente ou apenas usar cat para copiar a chave pública para o local authorized_keys . Heres como eu fiz isso.

  1. Do local, ssh para remoto e use 'ssh-keygen' 'como em sua etapa 1
  2. Do local, scp a chave pública do arquivo remoto para o local tmp.pub
  3. No local, "" cat tmp.pub > > /home/jimmy/.ssh/authorized_keys

Se você anexar sua própria chave pública ao usuário authorized_keys do usuário remoto na etapa 1, poderá executar a etapa 2 sem digitar novamente a senha.

Seu ssh command ssh-copy-id é executado em um sub-shell no remote sem um tty , então você vê a saída retornada para o seu local, mas sua entrada local não chegar ao sub-shell remoto. Na minha máquina (Debian Wheezy) eu fiz:

yba@tavas:~$ ssh localhost ssh localhost
Warning: Permanently added 'localhost' (ECDSA) to the list of known hosts.
Enter passphrase for key '/home/yba/.ssh/id_rsa': 
Pseudo-terminal will not be allocated because stdin is not a terminal.
Warning: Permanently added 'localhost' (ECDSA) to the list of known hosts.
Permission denied, please try again.
Permission denied, please try again.
Permission denied (publickey,password).
yba@tavas:~$ 

Observe o motivo que é impresso, "Pseudo-terminal não será alocado porque stdin não é um terminal", O resultado é o mesmo se você pressionou a tecla Enter duas vezes no controle remoto sem senha.

    
por 19.04.2013 / 08:06

Tags