ホスト鍵フィンガープリントに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: 

おすすめ記事