Linux

處理 SSH 主機驗證錯誤的最流暢的工作流程?

  • May 9, 2013

這是一個我們都面臨的簡單問題,並且可能無需多想就可以手動解決。

隨著伺服器的更改、重新配置或重新分配 IP 地址,我們會收到下面的 SSH 主機驗證消息。我有興趣簡化工作流程以解決這些 ssh 辨識錯誤。

鑑於以下消息,我通常會vi /root/.ssh/known_hosts +434刪除 ( dd) 違規行。

我看到其他組織的開發人員/使用者因為看到此消息而感到沮喪而刪除了他們的整個 known_hosts文件。雖然我沒有走那麼遠,但我知道有一種更優雅的方式來處理這個問題。

尖端?

[root@xt ~]# ssh las-db1

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    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
ed:86:a2:c4:cd:9b:c5:7a:b1:2b:cc:42:15:76:8c:56.
Please contact your system administrator.
Add correct host key in /root/.ssh/known_hosts to get rid of this message.
Offending key in /root/.ssh/known_hosts:434
RSA host key for las-db1 has changed and you have requested strict checking.
Host key verification failed.

您可以使用該ssh-keygen命令按主機刪除特定條目:

ssh-keygen -R las-db1

如果你沒有那個命令,你總是可以使用 sed:

sed -i '/las-db1/d' /root/.ssh/known_hosts

作為一個 puppet 使用者,我解決這個問題的方法是讓我的 puppet 伺服器收集我的 SSH 主機密鑰並將它們發佈到我所有建立 SSH 連接的系統。

這樣我就不必擔心刪除它們。自從我的代理每 30 分鐘執行一次以來,puppet 有 99% 的時間為我執行並更新了密鑰。對我來說例外情況非常罕見,因此如果我不願意等待,我不介意快速編輯系統範圍的 known_hosts。

class ssh::hostkeys {

 @@sshkey { "${::clientcert}_rsa":
   type => rsa,
   key => $sshrsakey,
   tag => 'rsa_key',
 }

 if 'true' == $common::params::sshclient {
   Sshkey <<| tag == 'rsa_key' |>> {
     ensure => present
   }
 }

 file {'/etc/ssh/ssh_known_hosts':
   ensure => present,
   owner => 'root',
   group => 'root',
   mode => 0644,
 }

}

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