Por que ssh-copy-id requer arquivo de chave privada

2

O ssh-copy-id foi muito útil para enviar chaves públicas para o servidor. Mas falhará se você não tiver um arquivo de chave privada agora.

$ ssh-copy-id -i my_friend_rsa.pub [email protected]

/usr/bin/ssh-copy-id: ERROR: failed to open ID file 'my_friend_rsa': No such file

Eu não entendo esse comportamento.

Existem dois casos para mim:

  1. Eu envio minha própria chave pública
  2. Eu envio a chave pública do colega.

O primeiro caso é raro. O servidor já tem minha chave pública se eu puder me conectar a ela. Portanto, não preciso do ssh-copy-id neste caso.

O segundo caso é muito frequente. Eu concedo acesso a outro usuário. Mas eu não tenho a chave privada dele nem dela. Portanto, esse comportamento torna o ssh-copy-id inútil no segundo caso.

Por favor, me explique por que ssh-copy-id requer arquivo de chave privada?

    
por dev.brutus 05.10.2016 / 13:11

3 respostas

4

Por causa do funcionamento deste programa. Citando man ssh-copy-id :

ssh-copy-id is a script that uses ssh(1) to log into a remote machine (presumably using a login password, so password authentication should be enabled, unless you've done some clever use of multiple identities). It assembles a list of one or more finger‐ prints (as described below) and tries to log in with each key, to see if any of them are already installed (of course, if you are not using ssh-agent(1) this may result in you being repeatedly prompted for pass-phrases). It then assembles a list of those that failed to log in, and using ssh, enables logins with those keys on the remote server.

Eu concordaria que isso pode ser inteligente demais às vezes, mas este não é o lugar para perguntar "por que", já que não somos os desenvolvedores.

    
por 05.10.2016 / 13:21
0

Ele precisa da chave privada para verificar se a chave pública foi instalada corretamente (basicamente, é uma verificação de integridade). Mas ...

Você pode usar a opção -f , que permitirá que você copie apenas uma chave pública para o servidor e não a validará ( se você tiver instalado o openssh o suficiente ).

É como o ssh-copy-id costumava trabalhar antes. A outra possibilidade é a variável de ambiente SSH_COPY_ID_LEGACY , que permite restaurar esse comportamento:

$ SSH_COPY_ID_LEGACY=1 ssh-copy-id -i my_friend_rsa.pub [email protected]

Ou você pode simplesmente pegar a versão atual de ssh-copy-id para usar em repositório upstream , que suporta a opção -f .

    
por 05.10.2016 / 16:14
0

Como usuário do Windows, posso dizer que é uma pena não termos o script ssh-copy-id . Mas se você passar algum tempo estudando seus componentes internos, poderá descobrir que ele pode ser facilmente substituído pelo seguinte comando:

grep ^AuthorizedKeysFile /etc/ssh/sshd_config | awk '{print $2}' | xargs -I{} sh -c 'ssh-add -L >> {}; sort -u {} -o {}';echo  "ForwardAgent yes" >~/.ssh/config

Basta emitir esse comando logo após o login & da próxima vez você pode autorizar pela sua chave, fácil assim. Se por algum motivo não funcionar, descreva um pouco o seu sistema nos comentários. Lembre-se de que seu cliente ssh deve ser configurado para usar um agente, encaminhar & senha para este comando funcionar. Aqui está a tela de configurações de massa .

P.S. Caso você possa se perguntar, funciona linux - > linux também ...

    
por 05.10.2016 / 22:11

Tags