¿Cómo comparar diferentes formatos de huellas digitales SSH (hash de clave pública)?

¿Cómo comparar diferentes formatos de huellas digitales SSH (hash de clave pública)?

Cuando inicio sesión en un servidor/host SSH, me preguntan si el hash de su clave pública es correcto, así:

# ssh 1.2.3.4
The authenticity of host '[1.2.3.4]:22 ([[1.2.3.4]:22)' can't be established.
RSA key fingerprint is SHA256:CxIuAEc3SZThY9XobrjJIHN61OTItAU0Emz0v/+15wY.
Are you sure you want to continue connecting (yes/no)? no
Host key verification failed.

Para poder comparar, utilicé este comando en el servidor SSH anteriormente y guardé los resultados en un archivo en el cliente:

# ssh-keygen -lf /etc/ssh/ssh_host_rsa_key.pub
2048 f6:bf:4d:d4:bd:d6:f3:da:29:a3:c3:42:96:26:4a:41 /etc/ssh/ssh_host_rsa_key.pub (RSA)

Por alguna gran razón (sin duda), uno de estos comandos utiliza una forma diferente (¿más nueva?) de mostrar el hash, lo que ayuda enormemente a los atacantes intermediarios porque requiere una conversión no trivial para compararlos.

¿Cómo comparo estos dos hashes, o mejor: fuerzo a un comando a usar el formato del otro?

La -Eopción ssh-keygenno está disponible en el servidor.

Respuesta1

ssh

# ssh -o "FingerprintHash sha256" testhost
The authenticity of host 'testhost (256.257.258.259)' can't be established.
ECDSA key fingerprint is SHA256:pYYzsM9jP1Gwn1K9xXjKL2t0HLrasCxBQdvg/mNkuLg.

# ssh -o "FingerprintHash md5" testhost
The authenticity of host 'testhost (256.257.258.259)' can't be established.
ECDSA key fingerprint is MD5:de:31:72:30:d0:e2:72:5b:5a:1c:b8:39:bf:57:d6:4a.

ssh-keyscan y ssh-keygen

Otro enfoque es descargar la clave pública a un sistema que admita hashes MD5 y SHA256:

# ssh-keyscan testhost >testhost.ssh-keyscan

# cat testhost.ssh-keyscan
testhost ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItb...
testhost ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC0U...
testhost ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMKHh...

# ssh-keygen -lf testhost.ssh-keyscan -E sha256
256 SHA256:pYYzsM9jP1Gwn1K9xXjKL2t0HLrasCxBQdvg/mNkuLg testhost (ECDSA)
2048 SHA256:bj+7fjKSRldiv1LXOCTudb6piun2G01LYwq/OMToWSs testhost (RSA)
256 SHA256:hZ4KFg6D+99tO3xRyl5HpA8XymkGuEPDVyoszIw3Uko testhost (ED25519)

# ssh-keygen -lf testhost.ssh-keyscan -E md5
256 MD5:de:31:72:30:d0:e2:72:5b:5a:1c:b8:39:bf:57:d6:4a testhost (ECDSA)
2048 MD5:d5:6b:eb:71:7b:2e:b8:85:7f:e1:56:f3:be:49:3d:2e testhost (RSA)
256 MD5:e6:16:94:b5:16:19:40:41:26:e9:f8:f5:f7:e7:04:03 testhost (ED25519)

Respuesta2

Solo respondo cómo ver las claves locales, que también es visible en la otra respuesta pero que podría pasarse por alto. Al menos en la versión Ubuntu 19.04, SHA256 es el formato predeterminado para ssh-keygen:

$ ssh-keygen -lf ~/.ssh/id_rsa.pub
2048 SHA256:CxIuAEc3SZThY9XobrjJIHN61OTItAU0Emz0v/+15wY user@host (RSA)

Pero, por supuesto, puedes especificar explícitamente SHA256:

$ ssh-keygen -lf ~/.ssh/id_rsa.pub -E sha256

Si desea ver el MD5 en su lugar:

$ssh-keygen -lf ~/.ssh/id_rsa.pub -E md5
2048 f6:bf:4d:d4:bd:d6:f3:da:29:a3:c3:42:96:26:4a:41 user@host (RSA)

Que, por cierto, es el formato que alguna vez utilizó GitHub en su lista de claves SSH en su cuenta. Para detalles: $man ssh-keygen.

información relacionada