
Como posso verificar a impressão digital do host recém-conectado quando tento conectar-me da minha máquina remota à máquina doméstica. Na primeira conexão eu consegui isso:
[email protected]$ ssh [email protected]:~/
The authenticity of host '[home-machine.org]:222 ([x.xx.xx.xx]:222)' can't be established.
ECDSA key fingerprint is SHA256:6lr/VtTwgrKZVNZQ8y8Le/ilfBYfo0e+9UliSg+AD2k.
Are you sure you want to continue connecting (yes/no)?
Como posso verificar a impressão digital da minha “máquina doméstica”? Eu estava tentando listá-los na minha máquina doméstica assim:
[email protected]:~$ for pubkey_file in /etc/ssh/*.pub; do ssh-keygen -lf ${pubkey_file}; done
1024 d1:ef:db:b4:24:fc:ca:fe:e1:11:8c:36:0a:77:90:49 /etc/ssh/ssh_host_dsa_key.pub (DSA)
256 d9:25:51:16:ca:76:bd:8f:b8:6a:79:a2:1c:81:4b:4c /etc/ssh/ssh_host_ecdsa_key.pub (ECDSA)
2048 3a:c6:2d:29:7c:b9:16:e8:ed:1c:a8:26:5d:ab:0d:1e /etc/ssh/ssh_host_rsa_key.pub (RSA)
[email protected]:~$
Mas essas chaves parecem estar em formatos diferentes. Isso é algum tipo de MD5 de impressão digital? Como posso ter essas impressões digitais em formato unificado?
Responder1
Seu servidor SSH fornece hashes de chave pública SHA256, que são muito mais seguros que os hashes MD5.
Você então deve especificar para ssh-keygen que deseja SHA256 em vez de hashes MD5. Tente executar o comando no seumáquina doméstica(ao qual você tenta se conectar a partir da máquina remota no seu exemplo):
for pubkey_file in /etc/ssh/*.pub; do ssh-keygen -lf ${pubkey_file} -E sha256; done
Responder2
Comandos usados
Exiba arte ascii da chave pública do host armazenada no servidor (para ser feito no lado do servidor, aquele ao qual você se conecta via ssh):
ssh-keygen -l -v -E md5 -f /etc/ssh/ssh_host_ecdsa_key.pub
-eu: Mostra a impressão digital do arquivo de chave pública especificado.
-v: visual (arte ascii)
-E md5: o algoritmo hash usado para calcular a impressão digital ("md5" ou "sha256"). ("sha256" é preferido se disponível). (pode não estar disponível em versões antigas do ssh-keygen)
-f: arquivo
Exibir arte ascii da chave pública do host do servidor remoto (para ser feito no lado do cliente, aquele que você conecta via ssh):
ssh -o visualhostkey=yes -o FingerprintHash=md5 <host_server_to_connect>
-o: opção
visualhostkey: visual (arte ascii)
Hash de impressão digital: algoritmo de hash a ser usado (use o mesmo obtido no servidor: md5 ou sha256)
Etapas para verificar a autenticidade de um host/servidor
Primeiro, 1.deve ser feito localmente no servidor (aquele ao qual você deseja se conectar via ssh): isso lhe dará uma primeira arte ascii. Imprima ou tire uma foto.
Segundo, 2.deve ser feito na primeira conexão SSH; ele exibirá uma segunda arte ascii. Se o ascii-art for o mesmo, então você pode respondersimpara o"eu confio?"pergunta (ou seja
Are you sure you want to continue connecting (yes/no)
).
Exemplo
- 1. Lado do servidor
$ ssh-keygen -l -v -E md5 -f /etc/ssh/ssh_host_ecdsa_key.pub
256 2e:a6:b3:27:14:12:0b:79:df:9a:7f:bd:4d:b1:e0:b6 (ECDSA)
+--[ECDSA 256]---+
| . |
|o o |
| o + . |
| o o . |
| . + S . . |
| + . . . o |
| . .o ..o o |
| ooo....+ |
| o= . E.. |
+-----------------+
- 2. Lado do cliente
$ ssh -o visualhostkey=yes -o FingerprintHash=md5 192.168.12.211
The authenticity of host '192.168.12.211 (192.168.12.211)' can't be established.
ECDSA key fingerprint is MD5:2e:a6:b3:27:14:12:0b:79:df:9a:7f:bd:4d:b1:e0:b6.
+---[ECDSA 256]---+
| . |
|o o |
| o + . |
| o o . |
| . + S . . |
| + . . . o |
| . .o ..o o |
| ooo....+ |
| o= . E.. |
+------[MD5]------+
Are you sure you want to continue connecting (yes/no)?
Mais alguma explicação
O primeiro comando exibirá a arte ascii correspondente à impressão digital do arquivo que você forneceu como entrada (e a própria impressão digital). O arquivo que você fornece como entrada é o públicohospedarchave do servidor. Quando um cliente se conecta (não apenas pela primeira vez), o servidor enviará sua chave pública de host. Essa chave de host pública será pesquisada em arquivos ~/.ssh/known_hosts
. Se a chave pública estiver no arquivo, tudo bem: o host (servidor) é conhecido, então passamos para a próxima etapa para autenticar o usuário (a autenticação do usuário não está descrita neste post). Se a chave pública não estiver no arquivo, o cliente calculará a impressão digital dessa chave pública do host com um algoritmo de hash (um algoritmo de hash diferente fornecerá uma impressão digital diferente). Esta impressão digital calculada anteriormente é exibida (junto com a arte ascii se a opção correspondente for fornecida) e você terá que responder sim ou não dependendo de você reconhecer esta impressão digital ou não (esta impressão digital é a imagem/hash da chave pública do host do servidor). Se você disser sim, a chave pública do servidor (não sua impressão digital) será adicionada ao arquivo ~/.ssh/known_hosts
.
Podemos notar que ~/.ssh/known_hosts
está sobseudiretório inicial (~), porquevocêconfie neste host (servidor), mas um usuário diferente pode não confiar no mesmo que você. Além disso, a chave pública do host do servidor não depende do usuário, portanto, é armazenada em arquivos /etc/ssh/
.
O segundo comando exibirá a impressão digital e a arte ascii da chave pública recebida dohost_server_to_connect(de acordo com o algoritmo hash fornecido nas opções). É o mesmo que fazer apenas ssh, mas com mais opções visuais, então a conexão continuará da mesma forma que uma conexão ssh normal.
Responder3
Servidor
ssh-keygen -l -v -f /etc/ssh/ssh_host_ed25519_key
Pode ser necessário combinar isso com o algoritmo do cliente com um dos outros arquivos nesse diretório. Os arquivos têm as permissões corretas, portanto usarão a chave pública.
Por exemplo, você pode precisar escrever
ssh-keygen -l -v -f /etc/ssh/ssh_host_rsa_key
Cliente
ssh -o visualhostkey=yes -o FingerprintHash=sha256