Gerador de Linhas ~/.ssh/known_hosts
Constrói linhas válidas do arquivo ~/.ssh/known_hosts a partir de host, porta, tipo de chave e fingerprint, com hashing HMAC opcional.
[host]:porta. HashKnownHosts yes requer hashing.known_hosts e o problema do trust-on-first-use
Toda vez que o SSH conecta num servidor ele pergunta: "é a mesma máquina com quem falei da última vez?" A resposta vive em ~/.ssh/known_hosts, um arquivo com uma linha por servidor que fixa a chave pública do host. Se a chave que o servidor apresenta bate com a linha, a conexão segue em silêncio; se não, o OpenSSH recusa com o aviso berrante "REMOTE HOST IDENTIFICATION HAS CHANGED!". Essa única verificação é o que impede um man-in-the-middle de se intrometer entre seu notebook e um servidor confiável ainda servindo TCP válido — sem o pinning, o atacante apenas apresenta a própria chave e captura sua sessão.
Formato do arquivo
Cada linha não-hasheada tem três ou quatro campos separados por espaço:
github.com,140.82.114.3 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOMqqnkV...
[gitlab.example.com]:2222 ssh-rsa AAAAB3NzaC1yc2EAAAADAQAB...
O host pode ser hostname, IP ou ambos separados por vírgula. Portas não-padrão usam o formato com colchetes [host]:porta. O tipo de chave (ssh-ed25519, ssh-rsa, ecdsa-sha2-nistp256 etc.) vem antes do blob base64 da chave pública. Um mesmo servidor pode ter várias linhas, uma por tipo — o OpenSSH escolhe a mais forte que combina.
Hostname hasheado para privacidade
O OpenSSH moderno usa HashKnownHosts yes por padrão: o hostname é trocado por um blob |1|sal|HMAC-SHA1 para que um atacante que roube o arquivo não consiga enumerar os servidores que você frequenta. Converta um arquivo existente com ssh-keygen -H. A consulta continua funcionando porque o SSH hashea o host de destino com o mesmo sal e compara. Para remover uma entrada antiga, use ssh-keygen -R hostname, que lida com formato puro ou hasheado.
Risco da primeira conexão e como mitigar
O TOFU só é seguro até onde o primeiro contato for. Se a primeira conexão já tiver um MITM, você felizmente pina a chave do atacante para sempre. Mitigações, em ordem de força:
- Verifique fora-de-banda — compare o fingerprint exibido pelo SSH com o que o provedor publica. O GitHub mantém o dele em
docs.github.com/.../githubs-ssh-key-fingerprints. - SSHFP no DNS — configure
VerifyHostKeyDNS yese o servidor publica seu fingerprint em registrosSSHFPassinados por DNSSEC. - Pré-distribua o arquivo via gestão de configuração (Ansible, Puppet, Chef) ou um
/etc/ssh/ssh_known_hostsglobal. - Certificados SSH — uma CA assina chaves de host e de usuário; clientes confiam na CA, não em fingerprints individuais. HashiCorp Vault SSH, Teleport, Smallstep e BastionZero fazem isso.
Fingerprints: SHA-256 vs MD5
Quando o SSH pede para você aceitar um host novo ele mostra algo como SHA256:dGhpc2lzbm90YXJlYWxoYXNo. O formato moderno é SHA-256 codificado em base64; o antigo MD5 com dois pontos (16:27:ac:a5:...) sumiu desde o OpenSSH 6.8 (2015). Para calcular você mesmo: ssh-keygen -lf /caminho/para/chave.pub. Para buscar uma entrada sem revelar o resto: ssh-keygen -F github.com.
Perguntas frequentes
Posso editar known_hosts à mão? Pode — é texto puro. Acrescente uma linha no formato correto e o SSH já reconhece. Remova com ssh-keygen -R hostname se estiver hasheado.
Por que o hostname é um hash ilegível? Privacidade. O hash impede que um atacante que leia o arquivo (malware, backup vazado) liste todo servidor que você acessa.
Vi um fingerprint estranho na primeira conexão — aceitar? Verifique fora-de-banda primeiro. Compare contra o valor publicado pelo provedor ou contra um registro SSHFP no DNS. Discrepância em servidor já pinado é parada obrigatória — investigue antes de forçar.
E se a chave do host mudar legitimamente? Reconstrução ou rotação. Rode ssh-keygen -R host, reconecte, confirme o fingerprint novo contra uma fonte autoritativa e deixe o SSH pinar de novo.
Existe alternativa para frotas grandes? Certificados SSH. Uma CA assina chaves de servidor, clientes só confiam na CA — sem known_hosts por host para manter.
Ferramentas Relacionadas
Gerador de OpenID Discovery
Gere o JSON de discovery OpenID Connect (RFC 8414) com endpoints, scopes, grants e algoritmos suportados pelo seu OP.
Gerador de Par de Chaves SSH (Ed25519)
Gere par de chaves SSH Ed25519 client-side prontos para usar em ~/.ssh/, com fingerprint SHA256 e formato OpenSSH.
Gerador de Quadrado Mágico
Gera quadrados mágicos de ordem ímpar (3x3 até 11x11) usando o método de De la Loubère. Linhas, colunas e diagonais somam o mesmo valor.
Prompt Code Review
Prompt para revisão automatizada de código.
Gerador de Citação de Programador
Sorteia uma citação de programador famoso. Útil para epígrafes em READMEs, slides ou apresentações.
Gerador de MAC Address
Gere endereços MAC aleatórios em vários formatos (dois pontos, hífen, ponto Cisco) com prefixos OUI conhecidos (VMware, VirtualBox, Apple, Intel) ou totalmente aleatórios. Tudo no navegador.