{"id":145,"date":"2017-04-05T21:00:03","date_gmt":"2017-04-06T00:00:03","guid":{"rendered":"https:\/\/www.linuxpro.com.br\/2017\/04\/ssh-sem-senha\/"},"modified":"2026-09-08T02:31:58","modified_gmt":"2026-09-08T05:31:58","slug":"ssh-sem-senha","status":"publish","type":"post","link":"https:\/\/www.linuxpro.com.br\/es\/2017\/04\/ssh-sem-senha\/","title":{"rendered":"Usando chaves de autentica\u00e7\u00e3o no SSH"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" alt=\"Mascote do LinuxPro enfiando a chave na fechadura do servidor, com o t\u00fanel SSH cifrado levando as chaves do notebook at\u00e9 o rack\" src=\"\/wp-content\/uploads\/2026\/09\/ssh-chaves-v4.webp\" width=\"1052\" height=\"652\" \/><\/p>\n<div style=\"background:#fff8e1;border-left:4px solid #8b1a1a;padding:.8em 1em;margin:1em 0\"><strong>Nota (2026):<\/strong> O howto de 2017 gerava RSA (<code data-no-translation=\"\">ssh-keygen -t rsa<\/code>) e desligava senha com <code data-no-translation=\"\">UsePAM no<\/code> + <code data-no-translation=\"\">\/etc\/init.d\/ssh restart<\/code>. Hoje o default \u00e9 <strong>Ed25519<\/strong>; PAM permanece ligado; o drop-in vai em <code data-no-translation=\"\">sshd_config.d<\/code>; s\u00f3 se corta senha depois de testar a chave numa segunda sess\u00e3o.<\/div>\n<p>Senha no SSH ainda cai em brute-force. O par de chaves \u2014 p\u00fablica no servidor, privada na sua m\u00e1quina, protegida por passphrase \u2014 \u00e9 o login de 2026. O OpenSSH do Ubuntu 24.04\/26.04 j\u00e1 gera Ed25519 se voc\u00ea chamar <code data-no-translation=\"\">ssh-keygen<\/code> sem flags (desde o 9.5). O resto \u00e9 permiss\u00e3o, <code data-no-translation=\"\">ssh-copy-id<\/code> e n\u00e3o se trancar do lado de fora.<\/p>\n<p><!-- more --><\/p>\n<h2>Gere a chave no cliente<\/h2>\n<p>Como o seu usu\u00e1rio, nunca como root:<\/p>\n<pre data-no-translation=\"\"><code class=\"language-bash\" data-no-translation=\"\">ssh-keygen -t ed25519 -a 64 -C \"$(whoami)@$(hostname)-2026\"\n<\/code><\/pre>\n<p>Aceite <code data-no-translation=\"\">~\/.ssh\/id_ed25519<\/code>. Coloque uma passphrase de verdade \u2014 a chave privada sem frase \u00e9 um login em arquivo. <code data-no-translation=\"\">-a 64<\/code> aumenta as rodadas KDF. Servidor velho que n\u00e3o fala Ed25519 (raro): <code data-no-translation=\"\">ssh-keygen -t rsa -b 4096<\/code>. DSA est\u00e1 morto no OpenSSH 7+.<\/p>\n<pre data-no-translation=\"\"><code class=\"language-bash\" data-no-translation=\"\">chmod 700 ~\/.ssh\nchmod 600 ~\/.ssh\/id_ed25519\nchmod 644 ~\/.ssh\/id_ed25519.pub\n<\/code><\/pre>\n<h2>Instale a p\u00fablica no servidor<\/h2>\n<p><code data-no-translation=\"\">ssh-copy-id<\/code> cria <code data-no-translation=\"\">~\/.ssh<\/code>, acerta permiss\u00e3o e anexa a linha em <code data-no-translation=\"\">authorized_keys<\/code>:<\/p>\n<pre data-no-translation=\"\"><code class=\"language-bash\" data-no-translation=\"\">ssh-copy-id -i ~\/.ssh\/id_ed25519.pub usuario@servidor\n# porta n\u00e3o padr\u00e3o:\nssh-copy-id -i ~\/.ssh\/id_ed25519.pub -p 2222 usuario@servidor\n<\/code><\/pre>\n<p>Sem <code data-no-translation=\"\">ssh-copy-id<\/code>:<\/p>\n<pre data-no-translation=\"\"><code class=\"language-bash\" data-no-translation=\"\">ssh usuario@servidor 'mkdir -p ~\/.ssh &amp;&amp; chmod 700 ~\/.ssh'\ncat ~\/.ssh\/id_ed25519.pub | ssh usuario@servidor 'cat &gt;&gt; ~\/.ssh\/authorized_keys &amp;&amp; chmod 600 ~\/.ssh\/authorized_keys'\n<\/code><\/pre>\n<p>Teste <strong>antes<\/strong> de mexer no <code data-no-translation=\"\">sshd<\/code>:<\/p>\n<pre data-no-translation=\"\"><code class=\"language-bash\" data-no-translation=\"\">ssh -i ~\/.ssh\/id_ed25519 -o IdentitiesOnly=yes usuario@servidor\n<\/code><\/pre>\n<p>Tem que entrar sem a senha da conta (a passphrase da chave, se tiver, o agent pergunta). Deixe essa sess\u00e3o aberta. Abra outro terminal para o endurecimento.<\/p>\n<h2>Desligue senha \u2014 sem UsePAM no<\/h2>\n<p>No Ubuntu, <code data-no-translation=\"\">UsePAM no<\/code> (o conselho de 2017) quebra outros caminhos do PAM. Mantenha PAM. Use drop-in, n\u00e3o edite o <code data-no-translation=\"\">sshd_config<\/code> inteiro:<\/p>\n<pre data-no-translation=\"\"><code class=\"language-bash\" data-no-translation=\"\">sudo tee \/etc\/ssh\/sshd_config.d\/99-keys-only.conf &lt;&lt;'EOF'\nPasswordAuthentication no\nKbdInteractiveAuthentication no\nPubkeyAuthentication yes\nPermitRootLogin prohibit-password\nEOF\nsudo sshd -t &amp;&amp; sudo systemctl reload ssh\n<\/code><\/pre>\n<p>No RHEL\/Rocky o servi\u00e7o \u00e9 <code data-no-translation=\"\">sshd<\/code>: <code data-no-translation=\"\">sudo systemctl reload sshd<\/code>. Confirme na sess\u00e3o que ficou aberta, e numa <em>nova<\/em>:<\/p>\n<pre data-no-translation=\"\"><code class=\"language-bash\" data-no-translation=\"\">ssh usuario@servidor\n<\/code><\/pre>\n<p>Se a nova falhar, a sess\u00e3o antiga ainda salva. N\u00e3o feche o console at\u00e9 a chave funcionar duas vezes.<\/p>\n<h2>Agent, config, chave f\u00edsica<\/h2>\n<p><code data-no-translation=\"\">ssh-agent<\/code> (ou o gnome-keyring) segura a privada destrancada na sess\u00e3o gr\u00e1fica:<\/p>\n<pre data-no-translation=\"\"><code class=\"language-bash\" data-no-translation=\"\">eval \"$(ssh-agent -s)\"\nssh-add ~\/.ssh\/id_ed25519\n<\/code><\/pre>\n<p>Um <code data-no-translation=\"\">~\/.ssh\/config<\/code> evita flag:<\/p>\n<pre data-no-translation=\"\"><code class=\"language-bash\" data-no-translation=\"\">Host lab\n  HostName 192.0.2.10\n  User nilton\n  IdentityFile ~\/.ssh\/id_ed25519\n  IdentitiesOnly yes\n<\/code><\/pre>\n<p>YubiKey \/ FIDO2: <code data-no-translation=\"\">ssh-keygen -t ed25519-sk<\/code> (OpenSSH 8.2+). A privada n\u00e3o sai do token. <code data-no-translation=\"\">ssh-copy-id -i ~\/.ssh\/id_ed25519_sk.pub usuario@servidor<\/code>.<\/p>\n<h2>O que ficou<\/h2>\n<p>Ed25519, <code data-no-translation=\"\">ssh-copy-id<\/code>, testar, s\u00f3 ent\u00e3o cortar senha. O diagrama de 2017 (cliente, sess\u00e3o, chaves) continua v\u00e1lido; o algoritmo e o <code data-no-translation=\"\">init.d<\/code> n\u00e3o. Man page: <code data-no-translation=\"\">man ssh-keygen<\/code>, <code data-no-translation=\"\">man sshd_config<\/code>.<\/p>","protected":false},"excerpt":{"rendered":"<p>Senha no SSH ainda cai em brute-force. O par de chaves \u2014 p\u00fablica no servidor, privada na sua m\u00e1quina, protegida por passphrase \u2014 \u00e9 o login de 2026. O OpenSSH do Ubuntu 24.04\/26.04 j\u00e1 gera Ed25519 se voc\u00ea chamar ssh-keygen &#8230; <a title=\"Usando chaves de autentica\u00e7\u00e3o no SSH\" class=\"read-more\" href=\"https:\/\/www.linuxpro.com.br\/es\/2017\/04\/ssh-sem-senha\/\" aria-label=\"Read more about Usando chaves de autentica\u00e7\u00e3o no SSH\">Read more<\/a><\/p>","protected":false},"author":0,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2],"tags":[14,4],"class_list":["post-145","post","type-post","status-publish","format-standard","hentry","category-linux","tag-howto","tag-linux"],"_links":{"self":[{"href":"https:\/\/www.linuxpro.com.br\/es\/wp-json\/wp\/v2\/posts\/145","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.linuxpro.com.br\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.linuxpro.com.br\/es\/wp-json\/wp\/v2\/types\/post"}],"replies":[{"embeddable":true,"href":"https:\/\/www.linuxpro.com.br\/es\/wp-json\/wp\/v2\/comments?post=145"}],"version-history":[{"count":4,"href":"https:\/\/www.linuxpro.com.br\/es\/wp-json\/wp\/v2\/posts\/145\/revisions"}],"predecessor-version":[{"id":1077,"href":"https:\/\/www.linuxpro.com.br\/es\/wp-json\/wp\/v2\/posts\/145\/revisions\/1077"}],"wp:attachment":[{"href":"https:\/\/www.linuxpro.com.br\/es\/wp-json\/wp\/v2\/media?parent=145"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.linuxpro.com.br\/es\/wp-json\/wp\/v2\/categories?post=145"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.linuxpro.com.br\/es\/wp-json\/wp\/v2\/tags?post=145"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}