Linux
SSH 問題:從套接字讀取失敗:對等方重置連接
我在我們的一台伺服器上編譯了 OpenSSH_6.6p1。我可以通過 SSH 登錄到升級後的伺服器。但是我無法從這裡連接到其他執行 OpenSSH_6.6p1 或 OpenSSH_5.8 的伺服器。連接時出現如下錯誤。
Read from socket failed: Connection reset by peer
在日誌中的目標伺服器上,我看到它如下所示。
sshd: fatal: Read from socket failed: Connection reset by peer [preauth]
我嘗試指定cipher_spec
$$ ssh -c aes128-ctr destination-server $$正如自 5.8p1(存檔版本)以來的 ssh ‘connection reset by peer’ 問題中所述,並且能夠連接。如何配置 ssh 以預設使用密碼?為什麼這裡需要密碼?
這個問題聽起來像是一個伺服器端的錯誤。當客戶端發送密碼列表時,openssh 伺服器可能希望能夠在單個系統呼叫中讀取該列表。
如果支持的密碼列表長於一個數據包中可以傳輸的長度,則伺服器在第一次呼叫中獲得的字節數可能比預期的要少。伺服器上的正確行為是執行另一個呼叫以獲取其餘字節。但是從出現的問題描述來看,伺服器在沒有立即獲得完整的密碼列表時關閉了連接。當來自客戶端的下一個數據包到達時,伺服器將向客戶端發送連接重置。
然後將客戶端配置為使用較短的密碼列表將解決該錯誤。openssh 客戶端將在以下位置查找密碼列表:
- 在命令行上使用 -c cipher_spec 或 -o Ciphers=cipher_spec
- 在 ~/.ssh/config 中,通過在相關主機部分或第一台主機之前指定密碼 cipher_spec。
- 在 /etc/ssh/ssh_config 中使用與 ~/.ssh/config 相同的格式
- 編譯時內置於客戶端的預設列表。
這兩個配置文件分別是每個使用者和系統範圍的設置。
Ciphers aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-cbc,3des-cbc
像 Eric 建議的那樣使用應該可以正常工作。