Restringir ssh pela impressão digital da chave do host

2

Existe uma maneira com o OpenSSH ( ssh ) especificar a impressão digital da chave do host esperada como um argumento da linha de comando para que uma conexão só seja permitida se a impressão digital da chave enviada pelo servidor corresponder àquela fornecida como um comando argumento de linha?

Estou tentando fornecer um nível semelhante de funcionalidade nas versões Windows e Posixly do aplicativo. No Windows, o cliente SSH usual é plink (também disponível no Linux) que possui uma opção de linha de comando --hostkey para essa finalidade:

$ plink -hostkey "d0:e4:ad:11:7d:6a:8c:c0:36:2b:ff:ee:16:cf:f7:46" user@host

Isso é possível com o comando OpenSSH ssh ?

    
por starfry 28.03.2017 / 16:24

1 resposta

5

Você pode definir a chave esperada em known_hosts antes de executar o ssh, mas eu acho que você precisaria da chave inteira, não apenas da impressão digital.

Mas o ssh imprime a impressão digital da chave ao conectar-se, se não for salvo em known_hosts , para que possamos usar isso e expect nossa maneira de sair disso.

O script aqui levaria o nome do host (ou user@host ) e a impressão digital esperada como argumentos, forçando um known_hosts vazio e comparando a impressão digital com a dada.

#!/usr/bin/expect -f

set host   [lindex $argv 0];
set fp     [lindex $argv 1];

spawn ssh -oUserKnownHostsFile=/dev/null $host
expect -indices -re "key fingerprint is (\[^.\]+)"
set fp_got $expect_out(1,string)

expect "Are you sure you want to continue connecting (yes/no)"
if { $fp_got == $fp } {
        send "yes\r"
} else {
        send "no\r"
}       
interact

Assim, dada a impressão digital correta, a conexão deve ser bem-sucedida:

$ ./ssh.expect localhost 60:6e:...:e1 
spawn ssh -oUserKnownHostsFile=/dev/null localhost
The authenticity of host 'localhost (::1)' can't be established.
ECDSA key fingerprint is 60:6e:...:e1.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'localhost' (ECDSA) to the list of known hosts.
itvirta@localhost's password: 
    
por 28.03.2017 / 17:02

Tags