Ssh

ssh 命令行 指定伺服器主機密鑰指紋

  • September 27, 2021

使用ssh命令行 (OpenSSH),我可以指定伺服器的主機密鑰指紋嗎?

wincp.com 可以使用(例如)-hostkey="ssh-rsa 2048 AA:BB:CC...etc

我已經閱讀了幾次手冊頁,如果我錯過了明顯的內容,我深表歉意。

我不想只自動接受主機密鑰,也不想要求使用者更新他們的known_hosts,而是在命令行上以某種形式指定主機密鑰。

OpenSSH 中沒有用於傳遞主機密鑰指紋的命令行選項。

雖然您可以使用臨時文件(與 格式相同known_hosts)並ssh使用-o UserKnownHostsFile

ssh -o "UserKnownHostsFile my_temp_known_host" host.example.com

請參閱ssh(對於-o)和ssh_config(對於UserKnownHostsFile)手冊頁。


您也可以考慮使用StrictHostKeyChecking yes.


正如Auto accept rsa key指紋 from command line所建議的那樣,您可以編寫一個小腳本來實現:

#!/bin/bash

TEMPFILE=$(mktemp)
echo "$1" > $TEMPFILE

ssh -o "UserKnownHostsFile $TEMPFILE" ${@:2}

rm $TEMPFILE

如果您呼叫腳本ssh_known_host,您可以使用它,將鍵作為第一個參數傳遞:

ssh_known_host 'github.com ssh-dss AAAAB3NzaC1kc3MAAACBANGFW2P9xlGU3zWrymJgI/lKo//ZW2WfVtmbsUZJ5uyKArtlQOT2+WRhcg4979aFxgKdcsqAYW3/LS1T2km3jYW/vr4Uzn+dXWODVk5VlUiZ1HFOHf6s6ITcZvjvdbp6ZbpM+DuJT7Bw+h5Fx8Qt8I16oCZYmAPJRtu46o9C2zk1AAAAFQC4gdFGcSbp5Gr0Wd5Ay/jtcldMewAAAIATTgn4sY4Nem/FQE+XJlyUQptPWMem5fwOcWtSXiTKaaN0lkk2p2snz+EJvAGXGq9dTSWHyLJSM2W6ZdQDqWJ1k+cL8CARAqL+UMwF84CR0m3hj+wtVGD/J4G5kW2DBAf4/bqzP4469lT+dF2FRQ2L9JKXrCWcnhMtJUvua8dvnwAAAIB6C4nQfAA7x8oLta6tT+oCk2WQcydNsyugE8vLrHlogoWEicla6cWPk7oXSspbzUcfkjN3Qa6e74PhRkc7JdSdAlFzU3m7LMkXo1MHgkqNX8glxWNVqBSc0YRdbFdTkL0C6gtpklilhvuHQCdbgB3LBAikcRkDp+FCVkUgPC/7Rw==' git@github.com

順便說一句,不要嘗試將<()shell 構造與 一起使用UserKnownHostsFile,如下所示:

-o UserKnownHostsFile=<(echo "hostname ssh-rsa ...")

它行不通。可能是因為創建的fd<()只能讀取一次,而ssh反复讀取文件。

引用自:https://serverfault.com/questions/678035