ssh-keygen: como gerar chaves SSH, cadastrar a chave pública e usar o ssh-copy-id

Ambiente de testeFamília RHELAlmaLinux 9.8conta rootVerificado em 2026-11-05
Comandos de redessh-keygenssh-copy-idLocalização/usr/bin/ssh-keygen

O ssh-keygen é o comando do OpenSSH que cria o par de chave privada e chave pública usado nas conexões SSH e que também verifica impressões digitais, troca a frase secreta e limpa o known_hosts. Criei chaves ed25519 e rsa em um servidor AlmaLinux 9, verifiquei as impressões digitais, troquei a frase secreta e o comentário e depois testei o ssh-copy-id em dry-run: a única coisa que vai para o servidor é a linha da chave pública do arquivo .pub.

Os nomes de conta e os caminhos dos arquivos de chave na saída abaixo são valores de exemplo, e as impressões digitais, as chaves públicas e o randomart vêm de chaves criadas para este artigo e apagadas depois. O comando que cadastra de fato a chave pública em um servidor aparece escrito, mas não foi executado.

1️⃣ Gerar chave com ssh-keygen: -t ed25519 e o comentário -C

A chave é criada no formato ssh-keygen -t tipo -C comentário. -t é o tipo de chave, e -C é um comentário que vai no fim da chave pública, onde se escreve um e-mail ou a finalidade da chave. Abaixo está a saída completa com o arquivo definido por -f e Enter pressionado nas duas perguntas da frase secreta.

ssh-keygen -t ed25519 -C "user@example.com" -f ~/.ssh/id_ed25519
Generating public/private ed25519 key pair.
Enter passphrase for "/home/user/.ssh/id_ed25519" (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/user/.ssh/id_ed25519
Your public key has been saved in /home/user/.ssh/id_ed25519.pub
The key fingerprint is:
SHA256:c73KJh85pPijvy43kS1uaQo77fSsGlE4Wz+aMF+sTy8 user@example.com
The key's randomart image is:
+--[ED25519 256]--+
|                 |
|     .           |
|    o o          |
|     = o   .     |
|    =   Soo .    |
|     = *+*.. .   |
|    o.B.o++ .    |
|    .=o*Eo.+     |
|    o+=@OO=      |
+----[SHA256]-----+

Se você só pressionar Enter na pergunta da frase secreta, a chave fica sem frase secreta. Se omitir -f, antes dessa pergunta aparece uma linha pedindo onde salvar o arquivo. Entre parênteses está o caminho padrão, .ssh/id_ed25519 dentro da sua pasta pessoal, e pressionar só Enter salva a chave ali.

O randomart no fim da saída é a impressão digital transformada em desenho. O mesmo desenho apareceu ao criar a chave e ao conferir de novo com -lv.

ls -l ~/.ssh/id_ed25519 ~/.ssh/id_ed25519.pub
-rw------- 1 user user 411 Oct 29 08:22 /home/user/.ssh/id_ed25519
-rw-r--r-- 1 user user  98 Oct 29 08:22 /home/user/.ssh/id_ed25519.pub

A chave privada foi criada com permissão 600 e a pública com 644. A chave privada fica só no seu computador e não vai para lugar nenhum.

cat ~/.ssh/id_ed25519.pub
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJVLiw04ugfXq15n2m8ZDW0OywkRoug8beXw/9VnVY/L user@example.com

A chave pública é uma única linha com o tipo de chave, o valor da chave e o comentário separados por espaços. É essa linha que entra no authorized_keys do servidor em que você vai se conectar. O papel de cada arquivo da pasta está reunido em uma árvore.

~/.sshPasta onde ficam as chaves e os registros de conexão · permissão 700
id_ed25519Chave privada · arquivo que fica só no seu computador · permissão 600
id_ed25519.pubUma linha de chave pública · vai no authorized_keys do servidor de destino · permissão 644
authorized_keysLista de chaves públicas que podem entrar neste servidor (fica no servidor que recebe)
known_hostsChaves de host dos servidores em que você se conectou · ssh-keygen -R apaga uma linha por vez
configApelido, porta e arquivo de chave por servidor (ssh_config)

2️⃣ Opções do ssh-keygen: -f, -N, -b, -q

Responder às perguntas é prático quando você digita à mão, mas em um script as perguntas precisam sumir. Definindo o arquivo com -f e a frase secreta com -N, a chave é criada na hora, sem perguntas.

ssh-keygen -t ed25519 -f ~/.ssh/deploy_key -N "" -C "deploy@example.com"
Generating public/private ed25519 key pair.
Your identification has been saved in /home/user/.ssh/deploy_key
Your public key has been saved in /home/user/.ssh/deploy_key.pub
The key fingerprint is:
SHA256:Rhk2/tgn59K8jtvDWJTOLiYnToM8t4gkdaMfu6TJ0oM deploy@example.com
The key's randomart image is:
+--[ED25519 256]--+
|        +        |
|       o +       |
|        +    .   |
|       . +  o    |
|    . o S ++o    |
|   . + +   B+    |
|  .oo * + .=+    |
|  E+o* Boo=++.   |
|   .=.=oo=o++.   |
+----[SHA256]-----+

Com aspas vazias depois de -N, a chave fica sem frase secreta, e o local de gravação e a impressão digital saíram de uma vez, sem nenhuma pergunta.

ssh-keygen -t ed25519 -f ~/.ssh/deploy_key -N ""
Generating public/private ed25519 key pair.
/home/user/.ssh/deploy_key already exists.
Overwrite (y/n)?

Ao rodar de novo com o mesmo nome, depois de already exists ele pergunta se deve sobrescrever. Digitando n, nada mudou e o comando terminou com código de saída 1. Para não sobrescrever por engano uma chave em uso, crie as chaves novas com outro nome.

ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa -N "" -C "user@example.com"
Generating public/private rsa key pair.
Your identification has been saved in /home/user/.ssh/id_rsa
Your public key has been saved in /home/user/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:f+uwCSQjMka1BEHzXADwIWbrlbVRiP6Z4tjnwNwPVAA user@example.com
The key's randomart image is:
+---[RSA 4096]----+
|o=BE*=+.         |
|oo.Oo++          |
| .+o+. .         |
|....  .          |
| .+ o.= S        |
| .o+o= + .       |
|  ++.o  . o .    |
| . o..o  . = .   |
|    o. .  o.o    |
+----[SHA256]-----+

No rsa, -b define o tamanho. Segundo o manual, o padrão é 3072 bits; acima, a chave foi criada com 4096 bits e RSA 4096 apareceu no cabeçalho do randomart. O manual informa que o ed25519 tem tamanho fixo e que -b é ignorado nele.

ssh-keygen -f ~/.ssh/default_key -N "" -C "user@example.com"
Generating public/private ed25519 key pair.
Your identification has been saved in /home/user/.ssh/default_key
Your public key has been saved in /home/user/.ssh/default_key.pub
The key fingerprint is:
SHA256:mwy02fpKxjxEVvLC2EUJeaMIiNFOVS0GwWVjN9v0j4c user@example.com
The key's randomart image is:
+--[ED25519 256]--+
|o+ o+=O=*..      |
|o + .*+B== .     |
| o ..oB+o.. .    |
|  . .+.=     +   |
|      = S   E o  |
|     + + o   .   |
|      B +        |
|     o o         |
|      ...        |
+----[SHA256]-----+

Sem -t, foi criada uma chave ed25519.

ssh-keygen -q -t ed25519 -f ~/.ssh/backup_key -N "" -C "backup@example.com"; echo rc=$?
rc=0

Com -q, tudo fica oculto, inclusive a impressão digital e o randomart, e só sobra o código de saída. Serve para criar por script chaves para vários servidores.

📌 Principais opções: resultados deste artigo

OpçãoTarefaResultado neste artigo
-t tipoTipo de chave a criarA primeira linha da saída mostra o tipo, como ed25519 ou rsa; sem a opção, ed25519
-C comentárioComentário que vai no fim da chave públicauser@example.com no fim da chave pública vista com cat
-f arquivoCaminho do arquivo de chaveUma linha dizendo que foi salvo em /home/user/.ssh/deploy_key; rodando de novo com o mesmo nome, already exists e Overwrite (y/n)?
-N fraseNova frase secreta (passphrase); aspas vazias significam sem frase secretaLocal de gravação e impressão digital de uma vez, sem pergunta de frase secreta
-b bitsTamanho da chaveCom 4096 no rsa, RSA 4096 no cabeçalho do randomart
-qOculta toda a saídaSó sobra a linha rc=0 impressa com echo
-lMostra a impressão digital de um arquivo de chaveA mesma impressão digital SHA256 na chave pública e na privada; no authorized_keys, uma linha por chave
-E hashDefine o tipo de hash da impressão digitalCom -E md5, uma impressão digital que começa com MD5:00:7b:02:5e
-vJunto com -l, mostra também o randomartO mesmo randomart de quando a chave foi criada
-yExtrai e mostra a chave pública a partir da chave privadaUma linha de chave pública idêntica, letra por letra, ao arquivo .pub
-pTroca a frase secreta da chave privadaAparece uma linha dizendo que foi salvo com a nova frase secreta, e a chave privada passa de 411 para 464 bytes
-P fraseFrase secreta antiga (a que está definida)Com a frase certa, a chave pública; com uma errada, incorrect passphrase supplied to decrypt private key
-cTroca o comentário; o novo vai com -COld comment: user@example.com e Comment 'user@laptop' applied
-F hostProcura a linha desse host no known_hosts# Host 192.0.2.10 found: line 1 e a própria linha
-R hostApaga a linha desse host do known_hostsknown_hosts updated e o arquivo original known_hosts.old; um host inexistente dá not found
-HTransforma em hash os nomes de host e endereços do known_hostsAs linhas passam a começar com |1|, e um WARNING avisa que o arquivo .old guarda as linhas sem hash

📎 Outras opções: segundo o manual oficial

OpçãoTarefa
-a rodadasRodadas de KDF (bcrypt_pbkdf) ao salvar a chave privada; quanto mais rodadas, mais lenta a verificação da frase secreta e mais resistente à força bruta; padrão 16
-ACria as chaves de host que faltam para cada tipo padrão (rsa, ecdsa, ed25519) nos caminhos padrão
-BMostra o resumo bubblebabble de um arquivo de chave
-eConverte uma chave OpenSSH para o formato -m (padrão RFC4716) e a mostra, para outros programas SSH
-iConverte uma chave sem frase secreta no formato -m (padrão RFC4716) para o formato OpenSSH e a mostra
-m formatoDefine o formato da chave (RFC4716, PKCS8, PEM); com -p, converte chaves privadas entre os formatos OpenSSH e PEM
-r hostMostra, a partir da chave pública, o registro DNS SSHFP desse nome de host
-s chave_CAAssina uma chave pública com uma chave de CA para criar um certificado
-LMostra o conteúdo de um certificado
-KBaixa para a pasta atual as chaves resident guardadas em um autenticador FIDO
-Y signAssina um arquivo com uma chave SSH; a assinatura é salva com .sig no fim do nome do arquivo, e o nome de uso vai com -n

3️⃣ ssh-keygen -l para ver a impressão digital e -y para extrair a chave pública

Com vários arquivos de chave, só pelo nome é difícil saber qual chave pública faz par com qual chave privada. Como a impressão digital é a mesma na chave privada e na pública, comparar com -l as impressões digitais dos dois arquivos confirma o par.

ssh-keygen -l -f ~/.ssh/id_ed25519.pub
256 SHA256:c73KJh85pPijvy43kS1uaQo77fSsGlE4Wz+aMF+sTy8 user@example.com (ED25519)
ssh-keygen -l -f ~/.ssh/id_ed25519
256 SHA256:c73KJh85pPijvy43kS1uaQo77fSsGlE4Wz+aMF+sTy8 user@example.com (ED25519)

O arquivo de chave pública e o de chave privada deram a mesma impressão digital SHA256. O 256 do início é o tamanho da chave, e os parênteses do fim indicam o tipo de chave.

ssh-keygen -l -E md5 -f ~/.ssh/id_ed25519.pub
256 MD5:00:7b:02:5e:b8:ba:85:0c:32:d7:15:7e:72:45:f7:bc user@example.com (ED25519)

Com -E md5, a saída passa para a impressão digital MD5, o formato antigo. Serve para comparar quando um servidor antigo ou um painel de administração mostra impressões digitais MD5.

ssh-keygen -lv -f ~/.ssh/id_ed25519.pub
256 SHA256:c73KJh85pPijvy43kS1uaQo77fSsGlE4Wz+aMF+sTy8 user@example.com (ED25519)
+--[ED25519 256]--+
|                 |
|     .           |
|    o o          |
|     = o   .     |
|    =   Soo .    |
|     = *+*.. .   |
|    o.B.o++ .    |
|    .=o*Eo.+     |
|    o+=@OO=      |
+----[SHA256]-----+

Com -v junto, o randomart aparece de novo. Era o mesmo desenho mostrado quando a chave foi criada.

ssh-keygen -l -f ~/.ssh/authorized_keys
256 SHA256:Rhk2/tgn59K8jtvDWJTOLiYnToM8t4gkdaMfu6TJ0oM deploy@example.com (ED25519)

Se você passar um arquivo com várias linhas de chave pública, como o authorized_keys, sai uma linha de impressão digital por chave. É assim que se confere quais chaves estão cadastradas em um servidor.

ssh-keygen -y -f ~/.ssh/id_ed25519
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJVLiw04ugfXq15n2m8ZDW0OywkRoug8beXw/9VnVY/L user@example.com

O -y extrai de novo a chave pública a partir da chave privada. Se você apagou o arquivo .pub ou levou só a chave privada para outro computador, basta salvar essa saída em um arquivo. A saída foi idêntica, letra por letra, ao arquivo .pub original.

4️⃣ ssh-keygen -p para trocar a frase secreta e -c para trocar o comentário

Com uma frase secreta (passphrase) na chave privada, o arquivo não pode ser usado sem ela, mesmo que vaze. Em troca, é preciso digitá-la a cada conexão, então ela combina com chaves que pessoas usam à mão, e não com chaves de scripts que rodam sozinhos, como os do cron.

ssh-keygen -p -f ~/.ssh/id_ed25519 -P "" -N "example-pass"
Key has comment 'user@example.com'
Your identification has been saved with the new passphrase.

-P é a frase secreta antiga e -N a nova. A chave não tinha frase secreta, então -P recebeu aspas vazias, e apareceram duas linhas dizendo que foi salva de novo com a nova frase secreta. O manual informa que, com -p sozinho e sem opções, ele pergunta a frase antiga e a nova em sequência.

ls -l ~/.ssh/id_ed25519
-rw------- 1 user user 464 Oct 29 08:22 /home/user/.ssh/id_ed25519

Depois de definir a frase secreta, o arquivo da chave privada cresceu de 411 para 464 bytes.

ssh-keygen -y -f ~/.ssh/id_ed25519 -P "example-pass"
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJVLiw04ugfXq15n2m8ZDW0OywkRoug8beXw/9VnVY/L user@example.com
ssh-keygen -y -f ~/.ssh/id_ed25519 -P "wrongpass"
Load key "/home/user/.ssh/id_ed25519": incorrect passphrase supplied to decrypt private key

Em uma chave com frase secreta, o -y também precisa da frase passada com -P. Com a frase certa saiu a mesma chave pública de antes, e com uma errada o comando terminou com o erro incorrect passphrase. O manual deixa claro que não há como recuperar uma frase secreta perdida; se você esquecer, crie uma chave nova e cadastre a chave pública de novo.

ssh-keygen -c -C "user@laptop" -f ~/.ssh/id_ed25519 -P "example-pass"
Old comment: user@example.com
Comment 'user@laptop' applied
cat ~/.ssh/id_ed25519.pub
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJVLiw04ugfXq15n2m8ZDW0OywkRoug8beXw/9VnVY/L user@laptop

O -c troca o comentário. O comentário antigo e o novo aparecem em uma linha cada, e o comentário no fim do arquivo de chave pública também virou user@laptop. O comentário é só uma marca para distinguir as chaves, então o valor da chave em si ficou igual.

ssh-keygen -p -f ~/.ssh/id_ed25519 -P "example-pass" -N ""
Key has comment 'user@laptop'
Your identification has been saved with the new passphrase.

Para tirar a frase secreta, passe aspas vazias para -N. As mesmas duas linhas aparecem e, depois disso, o -y voltou a rodar sem -P.

5️⃣ ssh-keygen -R para apagar chaves de host do known_hosts

No known_hosts se acumulam, uma por linha, as chaves de host dos servidores em que você se conectou. Se um servidor for reinstalado e a chave de host mudar, o ssh recusa a conexão porque ela não bate com a chave guardada, e a opção que apaga a linha antiga é -R. O known_hosts abaixo é um arquivo de três linhas com endereços de exemplo, indicado com -f.

cat ~/.ssh/known_hosts
192.0.2.10 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKKphFOc7oiKNpIHFTzK/ippCS5U5D+lF3xmXM6dmYjk
server2.example.com,192.0.2.20 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAID3s6oYeTCz7KeYs0f/60/Ix0DhmK4hf1uHCC10TrXyR
[192.0.2.30]:2222 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIC0WmcBD2HIsiSn+tERrbeFIyExAodSEUhE9j5WMpkRW

Cada linha traz o nome de host ou endereço, o tipo de chave e o valor da chave, nessa ordem. A segunda linha, unida por vírgula, tem o nome e o endereço do mesmo servidor, e os colchetes com dois-pontos da terceira linha indicam uma porta diferente da 22.

ssh-keygen -F 192.0.2.10 -f ~/.ssh/known_hosts
# Host 192.0.2.10 found: line 1
192.0.2.10 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKKphFOc7oiKNpIHFTzK/ippCS5U5D+lF3xmXM6dmYjk

O -F mostra a linha desse host junto com o número da linha. Para um host inexistente, não mostrou nada e terminou com código de saída 1.

ssh-keygen -R 192.0.2.10 -f ~/.ssh/known_hosts
# Host 192.0.2.10 found: line 1
/home/user/.ssh/known_hosts updated.
Original contents retained as /home/user/.ssh/known_hosts.old
cat ~/.ssh/known_hosts
server2.example.com,192.0.2.20 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAID3s6oYeTCz7KeYs0f/60/Ix0DhmK4hf1uHCC10TrXyR
[192.0.2.30]:2222 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIC0WmcBD2HIsiSn+tERrbeFIyExAodSEUhE9j5WMpkRW

O -R apaga a linha desse host e mantém o arquivo original como known_hosts.old. Depois de apagar, sobraram só duas linhas.

ssh-keygen -R 192.0.2.99 -f ~/.ssh/known_hosts
Host 192.0.2.99 not found in /home/user/.ssh/known_hosts
ssh-keygen -R "[192.0.2.30]:2222" -f ~/.ssh/known_hosts
# Host [192.0.2.30]:2222 found: line 2
/home/user/.ssh/known_hosts updated.
Original contents retained as /home/user/.ssh/known_hosts.old

Ao indicar um host inexistente, saiu só uma linha not found. Para um servidor com outra porta, é preciso incluir os colchetes e a porta exatamente como aparecem no known_hosts.

ssh-keygen -H -f ~/.ssh/known_hosts
WARNING: /home/user/.ssh/known_hosts.old contains unhashed entries
Delete this file to ensure privacy of hostnames
/home/user/.ssh/known_hosts updated.
Original contents retained as /home/user/.ssh/known_hosts.old
cat ~/.ssh/known_hosts
|1|JL/knNlx/BnCoOWp5rNeRo3r1rE=|OCPyeFd1rgG8P2QGzrju/V2Y8c4= ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAID3s6oYeTCz7KeYs0f/60/Ix0DhmK4hf1uHCC10TrXyR
|1|AG9QJQvGaQmVsEusSdND1lM9cKI=|Ue0a9suJIzN0yxoJgV7ClLBgSYw= ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAID3s6oYeTCz7KeYs0f/60/Ix0DhmK4hf1uHCC10TrXyR

O -H transforma em hash os nomes de host e endereços. É a opção que evita que um arquivo vazado revele em quais servidores você se conectou, e o nome e o endereço que estavam unidos por vírgula foram separados em duas linhas com hash. Também apareceu um aviso de que o arquivo .old guarda o conteúdo sem hash.

ssh-keygen -F server2.example.com -f ~/.ssh/known_hosts
# Host server2.example.com found: line 1
|1|JL/knNlx/BnCoOWp5rNeRo3r1rE=|OCPyeFd1rgG8P2QGzrju/V2Y8c4= ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAID3s6oYeTCz7KeYs0f/60/Ix0DhmK4hf1uHCC10TrXyR

Mesmo no arquivo com hash, o -F encontrou a linha pelo nome.

6️⃣ ssh-copy-id para cadastrar a chave pública e authorized_keys

Criar a chave não basta: enquanto o servidor não conhecer a chave pública, a conexão continua sendo feita com senha. O lugar que apresenta a chave pública ao servidor é o ~/.ssh/authorized_keys da conta em que você se conecta, e o ssh-copy-id é o comando que coloca a linha do .pub nesse arquivo. A chave privada fica no seu computador e só a linha da chave pública atravessa. Clique nos botões de etapa do diagrama abaixo para ver onde ficam os dois arquivos.

🔐 Como o par de chaves do ssh-keygen é usado na conexão
Diagrama explicativo
🔍 Etapas
$ ssh-keygen -t ed25519 -C user@example.comssh-copy-id -i ~/.ssh/id_ed25519.pub user@192.0.2.10ssh -i ~/.ssh/id_ed25519 user@192.0.2.10
💻 Meu computador ~/.ssh
🔒id_ed25519Chave privada · nunca sai daqui
🔑id_ed25519.pubUma linha de chave pública · copiada para o servidor
➜Ainda não está no servidorUma linha de chave pública copiadaO servidor confere com a chave pública
🖥️ Servidor ~/.ssh/authorized_keys
📄VazioLogin só com senha
🔑ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJVLiw04ugfXq15n2m8ZDW0OywkRoug8beXw/9VnVY/L user@example.comChave pública cadastrada · só passa a chave privada que forma par com esta linha
O ssh-keygen cria a chave privada e a pública como um par. A chave privada fica só em ~/.ssh no seu computador, e a pública é a linha do arquivo .pub. Nesta etapa ainda não há nada no servidor, então o login é feito só com senha.
O ssh-copy-id acrescenta a linha da chave pública ao fim do ~/.ssh/authorized_keys do servidor. A chave privada não é copiada. A chave pública não precisa ficar em segredo, então você pode colocar a mesma linha em vários servidores.
Na conexão, o servidor usa a chave pública do authorized_keys para conferir a assinatura da sua chave privada. Se o par bater, você entra sem senha; em um computador sem o arquivo da chave privada, a senha é pedida mesmo para a mesma conta.
ssh-copy-id -n -i ~/.ssh/deploy_key.pub -o ConnectTimeout=3 user@192.0.2.10
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/user/.ssh/deploy_key.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed

/usr/bin/ssh-copy-id: ERROR: ssh: connect to host 192.0.2.10 port 22: Connection timed out

O -n é um dry-run, então nada é gravado no servidor. Mesmo assim, o ssh-copy-id primeiro tenta entrar com aquela chave para filtrar as já cadastradas, e como 192.0.2.10 é um endereço para documentação, a conexão não aconteceu e terminou com timed out. As opções depois de -o vão direto para o ssh.

ssh-copy-id -n -f -i ~/.ssh/deploy_key.pub -o ConnectTimeout=3 user@192.0.2.10
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/user/.ssh/deploy_key.pub"
=-=-=-=-=-=-=-=
Would have added the following key(s):

ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKKphFOc7oiKNpIHFTzK/ippCS5U5D+lF3xmXM6dmYjk deploy@example.com
=-=-=-=-=-=-=-=

O -f é o modo forçado que pula essa verificação. Junto com -n, a linha de chave pública que iria para o servidor apareceu abaixo de Would have added. É a mesma linha do conteúdo do arquivo .pub.

ssh-copy-id -i ~/.ssh/id_ed25519.pub user@192.0.2.10

O cadastro de verdade é feito com este comando sem -n. Segundo o script do ssh-copy-id e o manual, ele pede uma vez a senha da conta, acrescenta a chave pública ao fim do ~/.ssh/authorized_keys do servidor e depois mostra Number of key(s) added: 1. Se o arquivo e a pasta não existirem, ele os cria, e se a mesma chave já estiver lá, ele a pula.

ssh-copy-id -i ~/.ssh/id_ed25519.pub -p 2222 user@192.0.2.10

Se a porta não for a 22, passe-a com -p.

Onde não houver ssh-copy-id, acrescente você mesmo a linha da chave pública ao authorized_keys do servidor. Entre no servidor com sua senha e siga a ordem abaixo. A saída foi conferida acrescentando o arquivo .pub dentro do mesmo servidor; em outro servidor, copie a linha do arquivo .pub e acrescente-a com echo.

mkdir -p ~/.ssh
chmod 700 ~/.ssh

Se a pasta .ssh não existir, crie-a e ajuste a permissão para 700.

cat ~/.ssh/deploy_key.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
cat ~/.ssh/authorized_keys
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKKphFOc7oiKNpIHFTzK/ippCS5U5D+lF3xmXM6dmYjk deploy@example.com
ls -l ~/.ssh/authorized_keys
-rw------- 1 user user 100 Oct 29 08:22 /home/user/.ssh/authorized_keys

A linha da chave pública entrou no authorized_keys, com permissão 600. O item StrictModes do manual do sshd_config informa que, na configuração padrão, o sshd verifica primeiro as permissões dos arquivos do usuário e recusa o login se qualquer pessoa puder escrever neles.

ssh -i ~/.ssh/id_ed25519 user@192.0.2.10

Com o cadastro pronto, conecte-se com a chave privada. Se a chave tiver um nome padrão como id_ed25519, o ssh a encontra sozinho; se tiver outro nome como deploy_key, indique o arquivo com a opção ssh -i.

🔲 Simulador do comando ssh-keygen

No simulador abaixo, você mesmo pode digitar ssh-keygen para criar chaves, conferir impressões digitais, trocar a frase secreta, limpar o known_hosts e testar o ssh-copy-id. As impressões digitais e as chaves públicas são os mesmos valores de exemplo do artigo, e o ssh-copy-id só simula o cadastro em um servidor virtual.

Simulador do comando ssh-keygenOpenSSH 9.9p1 · user
[root@server work]#
Use as teclas ↑↓ para chamar de volta os comandos digitados antes.

🔢 FAQ & conteúdo recomendado

O padrão do ssh-keygen é ed25519, e a chave é curta: a linha da chave pública tinha 98 bytes. A chave pública rsa de 4096 bits tinha 742 bytes; o rsa é usado para conectar a servidores ou equipamentos antigos que não aceitam ed25519.

Pode. Segundo o manual do ssh, o ssh só procura sozinho os nomes padrão como ~/.ssh/id_ed25519 e ~/.ssh/id_rsa; outro nome você indica com -i ao se conectar ou escreve em IdentityFile no ~/.ssh/config.

Segundo o manual do sshd_config, mude PasswordAuthentication para no e faça o sshd reler a configuração. Desligue só depois de confirmar em outro terminal que o acesso por chave funciona. Se desligar antes de conferir, você pode ficar sem entrar nem por senha nem por chave e acabar trancado fora do servidor.

ℹ️ Aviso de afiliados
O conteúdo deste site contém links de afiliados. Quando um visitante compra um produto ou serviço por meio de um desses links, o site recebe uma comissão do vendedor. O valor que o comprador paga (em promoções, ele diminui ↓) não aumenta por causa disso. Preços, descontos e informações de estoque valem para o momento em que o texto foi escrito e podem ter mudado, por isso confirme com o vendedor antes de comprar. Os produtos são escolhidos e avaliados por critérios próprios, e o recebimento de comissão não influencia a ordem de apresentação nem o conteúdo das avaliações.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Demonstre sua humanidade: 10   +   8   =