2010-07-16 154 views
2
system("ssh test.host.com"); 

其要求permentaly是否添加密鑰?如何處理ssh密鑰?

我想自動它應該說是的!

+4

首先,閱讀* why * ssh詢問以及總是回覆yes的安全含義。然後決定這些是否可以接受。然後問如何去做。 – ysth 2010-07-16 17:34:42

回答

1

運行SSH Agent,然後再啓動應用程序並使用它添加一個密鑰(在Windows上的菜單中選項或從Unix上的命令行使用ssh-add)。

+3

我不明白這個答案與被問到的問題有什麼關係,也不知道爲什麼它得到了接受的答案。問題是將主機的公鑰添加到本地的known_hosts文件中。 ssh-add命令用於客戶端對服務器的公鑰認證,而不用於驗證服務器的主機密鑰。 – Jonas 2010-07-17 12:35:35

4

有人必須同意第一個鍵是有效的。您可以要求用戶手動添加相關信息到〜/ .ssh/known_hosts(或者自己動手)。

1

正如Nathon提到的解決這個問題的正確方法是獲取已知密鑰列表中的主機密鑰。簡單的方法是手動ssh到主機,然後回答yes,然後密鑰將被緩存在$HOME/.ssh/known_hosts中。必須爲每個將連接到的主機以及將運行該程序的每個用戶執行此操作。如果您在系統上擁有管理員權限,則從您運行的ssh還可以將主機密鑰添加到/etc/ssh/ssh_known_hosts以使其可供所有用戶使用。

如果您不知道腳本將連接到哪個主機,則可能需要查看Expect這樣的模塊來監視和響應主機密鑰提示。雖然自動化這一步顛覆了ssh提供的一些安全性。

8

ssh詢問您是否想即使主機的公鑰不檢查尚未連接的事實是你/etc/ssh/ssh_config~/.ssh/configStrictHostKeyChecking ask(或yes)的結果。如果您想自動將未知主機密鑰添加到您的known_hosts文件中,您可以將其設置爲no。如果你不想讓這永久的配置更改,您也可以使用它的命令行:

system("ssh -o StrictHostKeyChecking=no test.host.com");

在這兩種情況下,ssh將發佈關於主機密鑰不匹配的將禁用密碼警告由於可能的中間人攻擊而進行身份驗證。您仍然可以使用公鑰認證進行登錄。

+0

+1:對我來說這是正確的答案,而不是接受的答案! – Lars 2010-07-17 12:39:14

+0

爲你+1:我必須同意;不知何故,我被這個奇怪的語法搞糊塗了。 – 2010-07-19 07:03:46