Linux 中關於 known_hosts 檔案,你所應該知道的
如果你經常使用 系統 ssh 到一個遠端伺服器,在主目錄中一般會有一個 .ssh 資料夾,在這個資料夾中會有若干個檔案,其中包括一個 known_hosts 檔案:
$ ls -l .ssh total 16 -rwxr-xr-x 1 abhishek abhishek 618 Aug 30 16:52 config -rw------- 1 abhishek abhishek 1766 Nov 12 2017 id_rsa -rw-r--r-- 1 abhishek abhishek 398 Nov 12 2017 id_rsa.pub -rw------- 1 abhishek abhishek 1 Sep 26 15:00 known_hosts
這裡,id_rsa 是你 ssh 的私鑰,id_rsa.pub 為ssh公鑰,config 檔案用於建立概要資訊,以便進行 ssh 連線。
本文重點要介紹的,是上述列表中的最後一個檔案,known_hosts,它是客戶端 ssh 配置檔案的重要組成部分。
SSH中的 known_hosts 檔案是什麼
known_hosts 檔案儲存使用者訪問的主機的公鑰。這是一個非常重要的檔案,它透過將使用者的身份儲存到本地系統來確保使用者連線到合法的伺服器。這也有助於避免中間人攻擊。
當你透過SSH連線到一個新的遠端伺服器時,系統會提示你是否要將遠端主機新增到 known_hosts 檔案:
The authenticity of host '194.195.118.85 (194.195.118.85)' can't be established. ED25519 key fingerprint is SHA256:wF2qILJg7VbqEE4/zWmyMTSwy3ja7be1jTIg3WzmpeE. This key is not known by any other names Are you sure you want to continue connecting (yes/no/[fingerprint])?
選擇 yes,伺服器的連線資訊會儲存在你的系統中。
我們假設你經常連線某個伺服器,且將該伺服器的連線資訊儲存在了 know_hosts 檔案中。
如果遠端伺服器的公鑰發生了更改,你的系統會根據 known_hosts 檔案中儲存的資訊記錄此次更改,你也會收到此更改的通知:
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: POSSIBLE DNS SPOOFING DETECTED! @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ The RSA host key for xyz remote host has changed,and the key for the corresponding IP address xxx.yy.xxx.yy is unknown. This could either mean that DNS SPOOFING is happening or the IP address for the host and its host key have changed at the same time. @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY! Someone could be eavesdropping on you right now (man-in-the-middle attack)! It is also possible that the RSA host key has just been changed. The fingerprint for the RSA key sent by the remote host is 69:4e:bb:70:6a:64:e3:78:07:6f:b4:00:41:07:d8:9c. Please contact your system administrator. Add correct host key in /home/.ssh/known_hosts to get rid of this message. Offending key in /home/.ssh/known_hosts:1 Keyboard-interactive authentication is disabled to avoid man-in-the-middle attacks.
在這種情況下,你可以在接受這個新金鑰之前聯絡遠端伺服器的管理員,以便確保遠端伺服器沒有受到入侵。
有時候,管理員可能會由於重新安裝伺服器而故意更改伺服器(主機)的金鑰。
無論更改的原因是什麼,你都需要首先從 known_hosts 檔案中刪除舊金鑰,以便重新連線到遠端伺服器。下次連線到此伺服器時,客戶端主機將為此伺服器建立新的主機金鑰。
管理多個經過身份驗證的使用者
如前所述,一旦客戶機主機成功連線到遠端伺服器,其 known_hosts 檔案將附加伺服器的公鑰。
有時,你可能會希望對伺服器進行身份驗證,而不需要提示進行伺服器金鑰驗證。例如,你正在執行 Ansible 之類的配置管理工具,並且不希望客戶端主機請求伺服器金鑰驗證。
因此,如果你有多個使用者,可以使用三種方式繞過SSH互動提示:
1)手動將伺服器的公鑰附加到每個使用者的known_hosts檔案中;
2)透過 ssh 訪問伺服器時,對每個客戶端都使用 行設定引數 -o StrictHostKeyChecking=no(不推薦);
3)在主 ssh_known_hosts 檔案中註冊所有主機,然後將此檔案編排到所有客戶端主機,然後使用 ssh-keyscan :
ssh-keyscan -H -t rsa ‘your-server-ip’ >> /etc/ssh/ssh_known_hosts
下圖顯示瞭如何使用 StrictHostKeyChecking=no 選項:
上述方法中,第一種方法相比於另外兩種方法,操作起來更加繁瑣。
從 known_hosts 檔案獲取遠端系統詳細資訊
獲取遠端系統的詳細資訊,不是一個簡單的工作。
基於安全考慮,幾乎所有 Linux 系統都會將 ssh 配置檔案中的 HashKnownHosts 引數設定為 yes。
這也就意味著在 known_hosts 檔案中的資訊是以 hash 方式儲存的,你可能會看到一些隨機數,但這並不能提供任何有用的資訊。
$ cat .ssh/known_hosts |1|yWIW17YIg0wBRXJ8Ktt4mcfBqsk=|cFHOrZ8VEx0vdOjau2XQr/K7B/c= ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFR293PJnDCj59XxfqYGctrMo60ZU5IOjACZZNRp9D6f |1|Ta7hoH/az4O3l2dwfaKh8O2jitI=|WGU5TKhMA+2og1qMKE6kmynFNYo= ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCmrxLW436AyBGyGCggl/j2qBCr782AVIvbiTEsWNBWLcWMKYAQpTdAXnaV4bBRqnk2NJg/60XDHKC2DF1tzx6ABWN/R6vcUAbulI9H1RUWpJ1AiDmFL84MvW2UukbpN5a6Lr+DvjclVqPxJRjQKr6Vy2K9oJgGKnHVcWSIHeAlW49kCCg5fIxF8stBTqJg0cRk6uxmcYVud1vh9a7SaZGK+jFZTB75RiHAVFuitHWpljecMxJRNYy/EhmmXrrvyU8pObVXlWlDd61uwExi4uEwNSY+Do7vR1y8svnt9mjTzzyM6MhT4sOcxWmNgdmw7bU/wPpie3dSjZMQeu2mQCSM7SG28dwjSyFPpanRsZKzkh0okAaCSItoNwl6zOf6dE3zt0s5EI6BPolhFAbT3NqmXRblxb7eV8rGEPf14iguHUkg6ZQr2OUdfeN1FYNMJ8Gb9RD159Mwjl4/jPIBdnXvt7zYct3XhPKm7Wxv4K/RWZE837C7mGQh2KEahWajdq8= |1|NonAy25kVXL24U2mx6ZNxAY5m98=|ypf0IMpf3qq3vhrvUMprssOhODs= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBE3br/9jaZfdB+qBxiVEZBJMb4XQONwzV4tH1xeFZX/zkyws2eBHrVO9O5l9b6M6+gO6nBtCwAzzaeLOn6mo8GQ=
如果你知道系統的主機名或IP地址,則可以從 known_hosts 獲取相關資訊:
ssh-keygen -l -F
但是,如果你想要一個能夠以明文形式列出的所有伺服器及其詳細資訊的命令,那是不可能的。
當然,現實中會有一些專門的工具可以破譯 known_hosts,但這不是普通使用者可以做到的。
從known_hosts中刪除資訊
如果想要從 known_hosts 檔案中刪除某個特定的主機資訊,可以根據遠端系統的主機名或 IP 執行這個操作:
ssh-keygen -R
當然也可以先識別相關伺服器的資訊,然後使用 rm 命令手動刪除,但是這個操作要麻煩的多,遠不如使用上述命令方便。
ssh-keygen -R 用 rm 命令手動刪除,但是這個操作要麻煩的多,遠不如使用上述命令方便。
透過了解 ssh 相關的配置檔案,有助於更好的理解系統安全相關知識。known_hosts 正是系統安全相關的重要組成部分。
以上就是本次分享全部內容。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69901823/viewspace-2921827/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 關於 jwt ,你應該知道的JWT
- 關於 jwt 你應該知道的事情JWT
- 關於前端模組化你應該知道的前端
- 關於WSL2你應該知道的
- 關於DNS,你應該知道這些DNS
- 關於字元編碼你應該知道的事情字元
- 關於iPhone SE你應該知道的20件事iPhone
- 【譯】關於JavaScript 陣列你應該知道的事情JavaScript陣列
- 關於MySQL密碼你應該知道的那些事MySql密碼
- 關於 MySQL 密碼你應該知道的那些事MySql密碼
- 你應該知道的10件關於Java 6的事情Java
- 「開位」你所應該知道的HTTP——HTTPS篇HTTP
- 你應該知道的Linux歷史Linux
- 【譯】關於 JavaScript 的原型你應該知道的所有事情JavaScript原型
- 你應該知道的10件關於Java 6的事情(轉)Java
- 你應該要知道的JS中的thisJS
- 關於Git小白應該知道的事Git
- 你應該知道的關於SEO和Javascript的6個事實JavaScript
- 你應該知道的16個linux命令Linux
- [譯]關於Angular髒值檢查你應該知道的最新指南Angular
- 關於HTTP/3背後你所不知道的HTTP
- 你應該知道的FlutterFlutter
- 你應該知道的RocketMQMQ
- 你應該知道的ip地址相關知識
- 你應該知道的一些Linux技巧Linux
- 關於Android的.so檔案你所需要知道的Android
- 關於Linux中“!”你不知道的驚歎用法Linux
- 關於機器學習,你應該知道的3個熱門專業術語機器學習
- 關於大資料,你應該知道的75個專業術語大資料
- 關於計算機書籍,你應該知道的五件事。計算機
- 關於 Git 你所不知道的一些事Git
- 關於檔案傳輸協議,你不知道的事協議
- 你應該知道的JS —— 物件JS物件
- 你應該知道的jQuery技巧jQuery
- 關於前端應該知道的5個小知識前端
- 關於 JavaScript 中的特殊函式,你應該這樣看JavaScript函式
- 中科三方:關於SSL證書你應該知道這些事
- 關於網頁設計師,你該知道的那些事網頁