Ограничение ssh по отпечатку ключа хоста

У вас должен быть вызов вектора ::размера (), чтобы функция скомпилировалась. Он не компилируется, потому что это шаблон класса. Я думаю, что вызов должен быть также в том же контексте, но я не уверен в этом.

3
28.03.2017, 17:24
1 ответ

Вы можете установить ожидаемый ключ в known_hosts перед запуском ssh, но я думаю, вам понадобится весь ключ, а не только отпечаток пальца.

Но ssh печатает отпечаток ключа при подключении, если он не сохранен в known_hosts , поэтому мы можем использовать его и ожидать выхода из него.

Здесь сценарий принимает имя хоста (или user @ host ) и ожидаемый отпечаток пальца в качестве аргументов, вызывает пустой known_hosts и сравнивает отпечатанный отпечаток с заданным.

#!/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

Таким образом, при правильном отпечатке пальца соединение должно быть успешным:

$ ./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: 
6
27.01.2020, 21:13

Теги

Похожие вопросы