
我是不是使用hosts.allow
或hosts.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
如果您已經排除了任何「外部」因素,以下一組步驟通常有助於縮小範圍。因此,雖然這不能直接回答您的問題,但它可能有助於追蹤錯誤原因。
故障排除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