ssh
OpenSSH()를 사용하여 예상되는 호스트 키 지문을 명령줄 인수로 지정하여 서버에서 보낸 키 지문이 명령줄 인수로 제공된 키 지문과 일치하는 경우에만 연결이 허용되도록 하는 방법이 있습니까 ?
Windows 및 Posixly 버전의 응용 프로그램에서 비슷한 수준의 기능을 제공하려고 합니다. Windows에서 널리 사용되는 SSH 클라이언트 plink
(Linux에서도 사용 가능)에는 --hostkey
이러한 목적을 위한 명령줄 옵션이 있습니다.
$ plink -hostkey "d0:e4:ad:11:7d:6a:8c:c0:36:2b:ff:ee:16:cf:f7:46" user@host
OpenSSH 명령을 사용할 수 있습니까 ssh
?
답변1
ssh를 실행하기 전에 예상되는 키를 설정할 수 있지만 known_hosts
지문뿐만 아니라 전체 키가 필요하다고 생각합니다.
그러나 SSH에 키 지문이 저장되어 있지 않으면 연결할 때 키 지문이 인쇄되므로 known_hosts
이를 사용하고 expect
제거할 수 있습니다.
여기의 스크립트는 호스트 이름(또는 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: