Aqui está o que eu tentei e recebi um erro:
$ cat /home/tim/.ssh/id_rsa.pub | ssh tim@just.some.other.server 'cat >> .ssh/authorized_keys'
Password:
cat: >>: No such file or directory
cat: .ssh/authorized_keys: No such file or directory
Aqui está o que eu tentei e recebi um erro:
$ cat /home/tim/.ssh/id_rsa.pub | ssh tim@just.some.other.server 'cat >> .ssh/authorized_keys'
Password:
cat: >>: No such file or directory
cat: .ssh/authorized_keys: No such file or directory
Respostas:
O OpenSSH vem com um comando para fazer isso ssh-copy-id
,. Você apenas fornece o endereço remoto e ele adiciona sua chave pública ao authorized_keys
arquivo na máquina remota:
$ ssh-copy-id tim@just.some.other.server
Pode ser necessário usar o -i
sinalizador para localizar sua chave pública na sua máquina local:
$ ssh-copy-id -i ~/.ssh/id_rsa.pub tim@just.some.other.server
>>
é tratado pelo seu shell e você está executando o comando através do SSH em vez de através de um shell. Sua correção de fazer com que o SSH execute um shell, que executa seu comando, deve funcionar
ssh-copy-id
não funcionará, certo?
Você sempre pode fazer algo assim:
scp ~/.ssh/id_rsa.pub user@remote.example.com:/tmp/id_rsa.pub
ssh user@remote.example.com
cat /tmp/id_rsa.pub >> ~/.ssh/authorized_keys
Não tenho certeza se você pode cat
de uma máquina local para uma sessão ssh. Apenas mova-o para / tmp como sugerido.
Edit: Isto é exatamente o que ssh-copy-id
faz. Assim como Michael disse.
cat
ou de outra forma). O que você está descrevendo é a maneira antiquada; ssh-copy-id
é recomendado porque há menos risco de erros de digitação ou concessão de permissões erradas aos arquivos.
cat ~/.ssh/id_rsa.pub | ssh <user>@<hostname> 'cat >> ~/.ssh/authorized_keys'
.
Esta resposta descreve como fazer com que a maneira pretendida mostrada na pergunta funcione.
Você pode executar um shell no computador remoto para interpretar o significado especial do >>
operador de redirecionamento:
ssh tim@just.some.other.server 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 há garantia de que command >> file
será interpretado por um shell. No seu caso, command >> file
é executado em vez do shell sem interpretação especial e >>
foi dado ao comando como argumento - da mesma maneira que a execução command '>>' file
em um shell.
Algumas versões do SSH (OpenSSH_5.9) invocam automaticamente o shell no servidor remoto e passam o (s) comando (s) a ele quando detectam tokens a serem interpretados por um shell como ;
>
>>
etc.
openssh
fornece ssh-copy-id
. A sequência seria:
Gere uma chave 4k decente
ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa4k
Inicie seu ssh-agent e obtenha informações como SSH_AGENT_PID
etc.
ssh-agent -s > ~/mysshagent
source ~/mysshagent
rm ~/mysshagent
Agora comece a carregar 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 agente ssh
Agora, na verdade, SSH para um sistema remoto
ssh username@remotehost.network
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 ssh-copy-id ao escolher outra porta que não 22 ... então aqui está o meu oneliner com uma porta ssh 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
De fato, o the ssh-copy-id
comando faz exatamente isso (do openssh-client
pacote):
ssh-copy-id user@host
Nota: host
significa endereço IP ou domínio .
Gostaria também de adicionar algumas informações adicionais a este
1) Podemos especificar uma porta diferente para SSH no servidor de destino:
ssh-copy-id "-p 8127 user@host"
Nota:
A porta deve estar na frente da user@host
ou não será resolvida.
2) nós podemos especificar um arquivo com uma chave pública :
ssh-copy-id -i ~/.ssh/id_rsa.pub user@host
Nota:
A -i
opção nos permite indicar o local apropriado do nome com o arquivo que contém a chave pública.
Às vezes, pode ser útil, especialmente se a armazenarmos em um local fora do padrão ou se tivermos mais de uma chave pública em nosso computador e desejarmos apontar para uma específica.