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]
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
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]
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.
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 .
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.
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
Tags ssh