호스트 키 지문으로 SSH를 제한합니다.

호스트 키 지문으로 SSH를 제한합니다.

sshOpenSSH()를 사용하여 예상되는 호스트 키 지문을 명령줄 인수로 지정하여 서버에서 보낸 키 지문이 명령줄 인수로 제공된 키 지문과 일치하는 경우에만 연결이 허용되도록 하는 방법이 있습니까 ?

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: 

관련 정보