A maneira mais fácil de copiar chaves ssh para outra máquina?

342

Sou preguiçoso em casa e uso a autenticação de senha nas minhas máquinas domésticas. Estou pronto para mudar para a autenticação baseada em chave. Existem muitas opções na Web sobre como fazer isso, incluindo a criação de gatos e, em seguida, atirar a chave, escanear a chave diretamente etc.

Estou procurando a maneira mais fácil e recomendada de copiar uma chave, espero que exista um wrapper de conveniência em algum lugar do pacote ssh do Ubuntu?

Eu já estou ciente de como desligar os logins de senha .

Jorge Castro
fonte

Respostas:

463

O ssh-copy-idcomando (no pacote openssh-client e instalado por padrão) faz exatamente isso:

ssh-copy-id [email protected]

copia a chave pública da sua identidade padrão (use -i identity_filepara outras identidades) no host remoto.

A identidade padrão é sua chave ssh "padrão". Ele consiste em dois arquivos (chaves públicas e privadas) em seu ~/.sshdiretório, normalmente chamado identity, id_rsa, id_dsa, id_ecdsaou id_ed25519(e o mesmo com .pub), dependendo do tipo de chave. Se você não criou mais de uma chave ssh, não precisa se preocupar em especificar a identidade, o ssh-copy-id irá selecioná-la automaticamente.

No caso de você não ter uma identidade, você pode gerar um com a ferramenta ssh-keygen.

Além disso, se o servidor usar uma porta diferente da porta padrão ( 22), você deve usar aspas desta maneira ( origem ):

ssh-copy-id "[email protected] -p <port-number>"
Marcel Stimberg
fonte
1
Qual é a identidade padrão?
Oxwivi 4/06/11
17
para porta diferente use isto:ssh-copy-id "user@host -p 6842"
jibon57
5
E se o servidor remoto para o qual você está copiando não permitir solicitações de senha e estiver basicamente bloqueado, exceto para acesso SSH?
Cyle
10
No mac, você pode fazer brew install ssh-copy-ide executar o comando.
Avishai
1
@MarcelStimberg, atualize a resposta para incluir o perfil -i; pessoas provavelmente têm mais de 1 chave e empurrá-los todos, ou tem que caçar para a opção -i nos comentários
Nick
129

Eu gosto da resposta de Marcel. Eu não conhecia esse comando. Eu sempre uso o que encontrei no site da Oracle :

cat ~/.ssh/id_rsa.pub | ssh <user>@<hostname> 'cat >> .ssh/authorized_keys && echo "Key copied"'

Eu pensei em publicá-lo aqui ainda, porque é uma boa ilustração do que pode ser alcançado em código shell com o poder de ssh. Mas usar o ssh-copy-idé definitivamente uma maneira mais segura de fazê-lo corretamente!

Observe que, se a pasta .sshainda não existir, o comando acima falhará. Além disso, pode ser melhor ao criar o arquivo para definir uma permissão mínima possível (basicamente leitura e gravação apenas para o proprietário). Aqui está um comando mais avançado:

cat ~/.ssh/id_rsa.pub | ssh <user>@<hostname> 'umask 0077; mkdir -p .ssh; cat >> .ssh/authorized_keys && echo "Key copied"'
Huygens
fonte
2
Este comandos exatos também trabalhar a partir de um Mac também
Mihai P.
Deve funcionar em qualquer Unix com mais shell. Atualizei a postagem com um comando atualizado, caso a pasta .sshnão exista no lado remoto.
Huygens
1
A catnão é necessário - um redirecionamento de entrada normal é suficiente, por exemplo,< ~/.ssh/id_rsa.pub | ssh ...
maxschlepzig
@ Huygens Thanks. É mais útil lembrar deste, porque você não precisa instalar nada e também pode ser bom para executar comandos estrangeiros, por exemplo, alterar as permissões do servidor, como demonstrado no seu exemplo avançado.
Jonathan Komar
2
Eu prefiro muito assim, pois permite usar o ssh detalhado, o que é útil para descobrir por que as coisas estão quebradas. sshcopyid congelou e nunca funcionou, isso foi perfeitamente.
Sirens
31

Método gráfico

  1. Abra AplicativosSenhas e ChavesMinhas Chaves Pessoais .
  2. Selecione sua chave e clique em RemotoConfigure Key for Secure Shell .

Configurar computador para conexão SSH

ændrük
fonte
Não tenho "Senhas e chaves de criptografia" no meu menu.
Jorge Castro
Qual versão do Ubuntu você está usando? No Ubuntu 10.04 LTS, isso deve estar disponível por padrão.
ændrük
10.10, acabou de adicionar a tag. A resposta de Marcel é o que estou procurando, apesar de marcar com +1 a sua resposta para desktop!
Jorge Castro
4
Este programa é seahorse.
Gilles
1
Eu acho que esta aplicação é no menu Sistema-> Preferências em 10,10 (não pode verificá-lo agora, eu estou em 10.04)
Huygens
18

No Ubuntu, você pode buscar suas chaves no Launchpad:

ssh-import-id [launchpad account name]

Detalhes :

  1. Você precisa de uma conta do Launchpad para fazer login ou criar uma conta
  2. Após o login, clique no botão ao lado de Chaves SSH:
  3. Cole o conteúdo do seu arquivo de chave pública nesse campo (incluindo o comentário). Essa chave se parece com:

    ssh-rsa AAAAB3Nza .... UyDOFDqJp lekensteyn
    

    Aqui, ssh-rsaindica que a chave é uma chave RSA, AAAAB3Nza .... UyDOFDqJpé a chave real e lekensteyné o comentário.

  4. Salve a chave pressionando Importar Chave Pública
  5. Se tudo correu bem, sua chave agora deve estar listada em chaves SSH:

O pacote ssh-import-idprecisa ser instalado na máquina que precisa ser acessada remotamente. Este pacote é instalado junto com o openssh-serverpacote, pois é um pacote recomendado para openssh-server. Depois de verificar ssh-import-idse foi instalado Na máquina cliente, execute:

ssh-import-id [launchpad account name]

Isso fará o download da chave pública dos servidores Launchpad por HTTPS, que protege você contra ataques do MITM.

No Ubuntu Lucid e antes, você pode fazer o mesmo com:

wget https://launchpad.net/~[lp acount name]/+sshkeys -O - >> ~/.ssh/authorized_keys && echo >> ~/.ssh/authorized_keys

O echocomando é necessário para obter uma nova linha extra após a linha com a chave SSH.

Lekensteyn
fonte
14

para porta personalizada

ssh-copy-id -i "[email protected] -p2222"

O padrão -i alterna para ~ / .ssh / id_rsa.pub, se você quiser outra chave, coloque o caminho da chave após -i

AVISO: Se você não escreveu o -i, ele copiará todas as suas chaves encontradas em ~ / .ssh

Omar S.
fonte
1
Você tem certeza sobre esse AVISO? "-i identity_file - Use apenas as chaves contidas em identity_file (em vez de procurar identidades via ssh-add (1) ou no default_ID_file). Se o nome do arquivo não terminar em .pub, ele será adicionado. Se o nome do arquivo for omitido, o arquivo default_ID_ID é usado. "
Yousha Aleayoub
0

ssh-copy-idfaz exatamente isso. Não sei por que algumas das outras respostas aqui adicionam informações imprecisas. A ajuda mostra o seguinte:

~$ ssh-copy-id -h
Usage: /usr/bin/ssh-copy-id [-h|-?|-f|-n] [-i [identity_file]] [-p port] [[-o <ssh -o options>] ...] [user@]hostname
    -f: force mode -- copy keys without trying to check if they are already installed
    -n: dry run    -- no keys are actually copied
    -h|-?: print this help

Eu apenas tentei o seguinte no cliente Ubuntu 18.04 com um servidor CentOS 7.6 e funcionou como um encanto. O exemplo mostra usando uma porta customizada de 2222e especificando uma chave pública em~/.ssh/path-to-rsa.pub

$ ssh-copy-id -i ~/.ssh/path-to-rsa.pub -p 2222 [email protected]

Antes de executar o comando, na verdade, usei o -ncomutador no final para executar uma execução a seco que confirmou que o comando funcionaria conforme o planejado. Depois de confirmar, executei o comando novamente como acima, sem a -nchave.

isapir
fonte