Como você copia a chave pública para um servidor ssh?

26

Eis o que tentei e recebi um erro:

$ cat /home/tim/.ssh/id_rsa.pub | ssh [email protected] 'cat >> .ssh/authorized_keys'
Password: 
cat: >>: No such file or directory
cat: .ssh/authorized_keys: No such file or directory
    
por Tim 18.01.2012 / 20:31

5 respostas

58

O OpenSSH vem com um comando para fazer isso, ssh-copy-id . Você apenas fornece o endereço remoto e adiciona sua chave pública ao arquivo authorized_keys na máquina remota:

$ ssh-copy-id [email protected]
    
por 18.01.2012 / 21:01
27

Você sempre pode fazer algo assim:

scp ~/.ssh/id_rsa.pub [email protected]:/tmp/id_rsa.pub
ssh [email protected] 
cat /tmp/id_rsa.pub >> ~/.ssh/authorized_keys

Não tenho certeza se você pode cat de uma máquina local em uma sessão ssh. Basta movê-lo para / tmp, conforme sugerido.

Edit: Isso é exatamente o que o ssh-copy-id faz. Assim como Michael disse.

    
por 18.01.2012 / 21:06
5

Esta resposta descreve como tornar a forma pretendida mostrada na questão de trabalho.

Você pode executar um shell no computador remoto para interpretar o significado especial do operador de redirecionamento >> :

ssh [email protected] sh -c "'cat >> .ssh/authorized_keys'" < /home/tim/.ssh/id_rsa.pub

O operador de redirecionamento >> é normalmente interpretado por um shell.

Quando você executa ssh host 'command >> file' , não é garantido que command >> file seja interpretado por um shell. No seu caso, command >> file é executado em vez do shell sem interpretação especial e >> foi dado ao comando como um argumento - da mesma forma que executando command '>>' file em um shell.

Algumas versões do SSH (OpenSSH_5.9) invocarão automaticamente o shell no servidor remoto e passarão o (s) comando (s) para ele quando detectarem tokens a serem interpretados por um shell como ; > >> etc .

    
por 20.12.2013 / 14:38
3

openssh fornece ssh-copy-id . A sequência seria:

  • Gere uma chave decente de 4k

    ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa4k
    
  • Inicie o seu ssh-agent e insira informações como SSH_AGENT_PID , etc.

    ssh-agent -s > ~/mysshagent
    source ~/mysshagent
    rm ~/mysshagent
    
  • Agora comece a carregar as chaves no seu agente SSH

    ssh-add ~/.ssh/id_rsa4k
    
  • Verifique se está carregado

    ssh-add -l
    ssh-add -L
    

    Isso mostrará o que você tem no ssh-agent

  • Agora, na verdade, o SSH para um sistema remoto

    ssh [email protected]
    
  • Agora você pode executar ssh-copy-id sem argumentos:

    ssh-copy-id
    

    Isso cria ~/.ssh/authorized_keys e preenche as informações básicas necessárias do ssh-agent.

por 14.07.2015 / 10:09
0

Eu tive problemas com o ssh-copy-id ao escolher outra porta de 22 ... então aqui está meu oneliner com um ssh-port diferente (por exemplo, 7572):

ssh yourServer.dom -p7572 "mkdir .ssh; chmod 700 .ssh; umask 177; sh -c 'cat >> .ssh/authorized_keys'" < .ssh/id_rsa.pub
    
por 27.02.2018 / 22:28

Tags