題 不要將hostkey添加到SSH的known_hosts


我想通過SSH連接到主機,但我不希望將主機名添加到我的主機 ~/.ssh/known_hosts

我怎樣才能做到這一點?


94
2018-05-15 00:03


起源




答案:


如果您因為使用雲服務器(AWS EC2,Rackspace CloudServers等)而想要這種行為,或者您經常在Vagrant中配置新映像,則可能需要更新SSH配置,而不是添加bash別名或更多選項。命令行。

考慮添加如下內容:

Host *.mydomain.com 
  StrictHostKeyChecking no
  UserKnownHostsFile /dev/null
  User foo
  LogLevel QUIET
  • 盡可能使用與主機的regex一樣嚴格。
  • 將LogLevel設置為QUIET將保持Guillaume提到的警告顯示

83
2018-06-07 00:28



你真的應該嘗試不完全禁用StrictHostKeyChecking,所以cclark的答案是使用雲服務器的一個很好的妥協。 - Alex Recarey
這對我來說非常有幫助,因為我正在使用Shipit(一種JavaScript部署工具)來對抗Vagrant。我無法輕易得到Shipit傳遞給SSH的參數,所以這讓我迴避了這個工具並告訴它我做了什麼,並且不想讓它記住。 - John Munsch
LogLevel就是我想要的。它的另一個優點是在運行腳本時不顯示公司配置的通知! (我現在正在運行w / loglevel ERROR) - Anshu Prateek
在什麼文件中我添加這個? - Wim Deblauwe
這是您的SSH配置文件。在Linux或macOS中,文件通常位於主目錄中名為.ssh的目錄中,並命名為config - 〜/ .ssh / config - cclark


-o "UserKnownHostsFile /dev/null"

應該管用。


79
2018-05-15 00:30



按預期工作,但它將始終報告:“警告:永久性地將'hostname,ip'(RSA)添加到已知主機列表中。”我讓它消失了:2>&1 | grep -v "^Warning: Permanently added" - Guillaume Boudreau
這就是我的場景所需要的 - 沒有DNS,帶有DHCP的局域網,計算機一直在獲得不同的地址。我需要一直輸入'yes',否則它很棒。 - Tomasz Gandor
添加-o“LogLevel ERROR”,它不會再抱怨警告了 - John
注意:請求禁止該消息“警告:永久添加'主機名,IP'(RSA)到已知主機列表。”向維護者報告 bugzilla.mindrot.org/show_bug.cgi?id=2413 - Ben Creasy
管道到 grep 將合併stdout和stderr;退出狀態也可以改變。如果使用 bash,最好使用進程替換來消除消息: ssh 2> >( egrep >&2 -v '^Warning: Permanently added') -o "UserKnownHostsFile /dev/null" [...]。它將避免管道,從而避免退出狀態處理的相應變化。 - Alex O


我想將主機密鑰添加到known_hosts(根據我的經驗,運行這些服務的人至少足夠智能,以便在服務於相同主機名的計算機之間保持主機密鑰一致),然後啟用StrictHostKeyChecking,關閉CheckHostIP,以及使用LogLevel進行日誌記錄ERROR將在不犧牲安全性的情況下為您提供最佳體驗。 (好吧,沒有CheckHostIP,你確實需要信任DNS,這是一個巨大的漏洞,沒有廣泛的DNSSEC或類似的東西;但我們現在只是在地毯下掃一掃。)

我使用只讀的known_hosts文件,所以我必須做一些事情,或者我得到關於無法向known_hosts添加條目的無盡警告。

我用的是什麼:

Host github.com *.github.com
StrictHostKeyChecking yes
CheckHostIP no
LogLevel ERROR

我希望這些服務能夠通過HTTPS在他們的網站上發布他們的SSH主機密鑰,因此我可以明確地複制它們而無需先連接並可能使自己暴露於MITM攻擊。


8
2018-05-20 17:40





我建議

LogLevel ERROR

過度

LogLevel QUIET

所以你仍然得到“無法解析主機名”和其他此類錯誤


5
2018-01-24 00:19



你應該能夠信任你的SSH連接,imho。不只是對你的風險保持沉默。 - sylvainulg
真的取決於。我們的開發環境每週都會被拆除並重建,它們的A記錄保持不變,但每次構建時都會生成主機密鑰。我們無法持久保存主機密鑰,因為A記錄只是在基於環境名稱的數據庫中定義,環境名稱可以隨時報廢或新創建,因此上述解決方法確實非常有用。 - Alex Berry


對於單個ssh會話,請使用此方法

ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null user@host

3
2017-12-16 05:54



這對於5歲的問題的接受答案沒有任何新的內容。 - JakeGould


你試過禁用嗎? StrictHostKeyChecking?你可以用它來做 -o 選項或在配置文件中 ~/.ssh/config


2
2018-05-15 00:11



我已經在使用它了。但它有不同的效果:它降低了主機密鑰檢查的嚴格性。即當主機未知時,它會在您禁用該選項時仍然連接。因此,它仍然保存主機。但我認為我找到了正確的解決方案(參見我的回答)。 - Albert


我發現以下.ssh / config條目很有用(帶有DHCP和DNS的LAN):

 CheckHostIP no

 Host *.*
 CheckHostIP yes

結果是本地計算機名稱“zora”或“goron”不會檢查動態分配的IP地址,但www.mycompany.com或node42.planetlab.com仍將確認其靜態IP。


0
2018-01-23 09:19