問題說明
[root@localhost shyn]# rsync -avz --checksum "root@192.168.159.133:/tmp/shyn" "/tmp /shyn"
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ 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 a host key has just been changed.
The fingerprint for the ED25519 key sent by the remote host is
SHA256:dU0gIAFptmBkxpnuKlblOTFH8VIwKPHzdJRaqrMVzSM.
Please contact your system administrator.
Add correct host key in /root/.ssh/known_hosts to get rid of this message.
Offending ED25519 key in /root/.ssh/known_hosts:1
ED25519 host key for 192.168.159.133 has changed and you have requested strict chec king.
Host key verification failed.
rsync: connection unexpectedly closed (0 bytes received so far) [Receiver]
rsync error: unexplained error (code 255) at io.c(226) [Receiver=3.1.3]
問題解決
這個錯誤表明遠程主機(192.168.159.133
)的SSH密鑰已變更,導致本地主機的 known_hosts
文件中的記錄不匹配。以下是解決方案:
1. 問題原因
- 遠程主機的SSH密鑰因重裝系統、IP沖突或人為修改而變更。
- 本地主機的
~/.ssh/known_hosts
仍保存舊密鑰,觸發安全警告。
2. 解決方法
方法 1:刪除舊密鑰記錄(推薦)
ssh-keygen -R 192.168.159.133
- 作用:從
known_hosts
中移除該IP的所有舊密鑰。 - 后續操作:下次連接時會自動添加新密鑰。
方法 2:手動編輯 known_hosts
文件
sed -i '/192.168.159.133/d' ~/.ssh/known_hosts
方法 3(不安全,僅限信任網絡):臨時跳過密鑰檢查
rsync -avz --checksum -e "ssh -o StrictHostKeyChecking=no" root@192.168.159.133:/tmp/shyn /tmp/shyn
警告:此方法會禁用主機密鑰驗證,存在中間人攻擊風險,僅用于測試環境。
3. 驗證解決
重新執行rsync命令,系統會提示接受新密鑰:
rsync -avz --checksum root@192.168.159.133:/tmp/shyn /tmp/shyn
輸入 yes
確認后,新密鑰將自動存入 known_hosts
。
4. 預防措施
場景 | 操作 |
---|---|
頻繁重裝虛擬機 | 使用固定IP和SSH密鑰對,避免密鑰變更。 |
多主機共用IP | 為每臺主機分配唯一IP,或使用主機名而非IP連接。 |
自動化腳本 | 在腳本中添加密鑰清理步驟:`ssh-keygen -R |
附:SSH密鑰管理常用命令
命令 | 用途 |
---|---|
ssh-keygen -R <IP> | 刪除指定IP的舊密鑰 |
ssh-keygen -F <IP> | 檢查密鑰是否已存在 |
ssh-keyscan -H <IP> >> ~/.ssh/known_hosts | 提前獲取并信任遠程主機密鑰 |
操作流程圖
通過以上步驟,可安全解決主機密鑰變更導致的連接問題。