ssh_exchange_identification:連線被遠端主機關閉(不使用hosts.deny)

ssh_exchange_identification:連線被遠端主機關閉(不使用hosts.deny)

我是不是使用hosts.allowhosts.deny,此外,SSH 可在我的 Windows 電腦(同一台筆記型電腦,不同的硬碟)上運行,但不能在我的 Linux 電腦上運行。

ssh -vvv root@host -p port給出:

OpenSSH_6.6, OpenSSL 1.0.1f 6 Jan 2014
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 20: Applying options for *
debug2: ssh_connect: needpriv 0
debug1: Connecting to host [host] port <port>.
debug1: Connection established.
debug1: identity file /home/torxed/.ssh/id_dsa type -1
debug1: identity file /home/torxed/.ssh/id_dsa-cert type -1
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_6.6
ssh_exchange_identification: read: Connection reset by peer

在Windows機器上,一切正常,所以我檢查了安全日誌,其中的行是相同的,伺服器對待兩台不同的「機器」沒有什麼不同,它們都透過公鑰身份驗證被允許。

因此得出的結論是,這一定是我本地 ArchLinux 筆記型電腦的問題……但是什麼呢?

[torxed@archie ~]$ cat .ssh/known_hosts 
[torxed@archie ~]$ 

所以這不是問題...

[torxed@archie ~]$ sudo iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination 

與防火牆設定沒有衝突(目前)。

[torxed@archie ~]$ ls -la .ssh/
total 20
drwx------  2 torxed users 4096 Sep  3  2013 .
drwx------ 51 torxed users 4096 May 11 11:11 ..
-rw-------  1 torxed users 1679 Sep  3  2013 id_rsa
-rw-r--r--  1 torxed users  403 Sep  3  2013 id_rsa.pub
-rw-r--r--  1 torxed users  170 May 11 11:21 known_hosts

/etc/ssh/ssh_config權限似乎很好(在伺服器上相同)。

答案1

最初發佈於 Ask Ubuntu

如果您已經排除了任何「外部」因素,以下一組步驟通常有助於縮小範圍。因此,雖然這不能直接回答您的問題,但它可能有助於追蹤錯誤原因。

故障排除sshd

我發現在任何此類情況下通常非常有用的是啟動sshd而不讓它守護進程。我的問題是,既沒有syslog也沒有auth.log表現出任何有意義的東西。

當我從終端啟動它時,我得到:

# $(which sshd) -Ddp 10222
/etc/ssh/sshd_config line 8: address family must be specified before ListenAddress.

好多了!此錯誤訊息使我能夠看到問題所在並修復它。兩個日誌檔案都不包含此輸出。

注意:至少在 Ubuntu 上這是滿足絕對路徑要求的$(which sshd)最佳方法。sshd否則你會得到以下錯誤:sshd re-exec requires execution with an absolute path。使-p 10222監聽sshd該替代端口,覆蓋配置文件 - 這樣它就不會與潛在運行的sshd實例發生衝突。確保在這裡選擇一個自由端口。

最後:連接到備用連接埠 ( ssh -p 10222 user@server)。

這種方法多次幫助我發現問題,無論是身份驗證問題還是其他類型的問題。要獲得真正詳細的輸出stdout,請使用$(which sshd) -Ddddp 10222(注意添加dd以增加詳細程度)。如需更多調試良好性檢查man sshd


此方法的主要優點是它允許您檢查sshd配置沒有必須sshd在預設連接埠上重新啟動。通常情況下這不應該幹擾現有的 SSH 連接,但我已經看到了。因此,這允許人們在(可能)切斷對遠端伺服器的存取之前驗證設定檔(例如,我對某些 VPS 甚至實體伺服器都進行了驗證,我需要支付額外費用才能獲得帶外存取)到機器)。

答案2

您還可能擁有一台記憶體嚴重碎片化的主機,以至於無法分配連續記憶體的頁面來分叉託管 SSH 會話的進程。

在這種情況下,您可以收到以下訊息之一:

ssh_exchange_identification: read: Connection reset by peer

或者:

Connection closed by aaa.bbb.ccc.ddd

取決於主機在跳出之前能走多遠。

如果記憶體碎片是明顯的原因,解決方案是透過其他方式存取伺服器並重新啟動一些相關服務。我發現 Apache 和 MySQL 是虛擬機器上的罪魁禍首,因為虛擬機器沒有交換分區。如果失敗,請重新啟動主機。

答案3

以防萬一,因為這件事發生在我身上。確保您的主機中正在執行 sshd!

這是一個愚蠢的失敗,但可能確實是你的問題。

答案4

ssh_exchange_identification: read: Connection reset by peer我在一個循環啟動 16 個或更多 ssh 會話的腳本中遇到了這個問題。 sshd 顯然跟不上;添加短暫的睡眠(顯然是解決方法.... :D 反對者)解決了我的問題:

for i in $(seq 32)
do
    ssh -f root@$HOST "./test_server -p $(expr $BASE_PORT + $i)" > svr${i}.out
    # for > 8 connections, ssh has ssh_exchange_identification issues
    sleep 0.1
done

相關內容