為什麼我的 ssh 登入後立即被刪除?

為什麼我的 ssh 登入後立即被刪除?

我正在嘗試透過 ssh (無密碼)從 MacBook Air (MacOS 10.14.6) 連接到 ubuntu 機器 (16.04.6),使用以下命令

ssh aaa.bbb.ccc.ddd

它總是工作正常,我收到提示,可以開始在遠端電腦上工作。

然而,大約一周後,.profile這不再起作用了,我對登入過程、新用戶、更改密碼、更改任何密鑰、升級作業系統、更改等進行了任何已知的更改.bashrc。也沒有,我重新啟動了 ubuntu 機器和 Mac,但沒有任何變化。/etc/hosts.allow/etc/hosts.deny

登入成功後,我看到一則訊息

Last login: ... from www.xxx.yyy.zzz
Connection to aaa.bbb.ccc.ddd closed

我該如何調試正在發生的事情?

附錄

檢查時/var/log/auth.log我看到以下條目:

Oct 16 07:02:38 mac353 systemd-logind[1173]: New session 11 of user alex.
Oct 16 07:02:38 mac353 sshd[11834]: Received disconnect from www.xxx.yyy.zzz port 61437:11: disconnected by user
Oct 16 07:02:38 mac353 sshd[11834]: Disconnected from www.xxx.yyy.zzz port 61437

答案1

Oct 16 07:02:38 mac353 sshd[11834]: Received disconnect from www.xxx.yyy.zzz port 61437:11: disconnected by user

www.xxx.yyy.zzz您的 MacBook Air 目前的 IP 位址是否正確?

網路上可能有另一個系統使用相同的 IP 位址。您可以正常啟動連接,但任何回應都會隨機傳遞到參與 IP 位址衝突的兩個系統,因此伺服器可能必須重新傳送一些傳出資料包。通常,實際主動嘗試建立連線的系統會更快地應答,因此對於一些初始資料包,它可能看起來運作得很好。

但最終衝突系統的 TCP/IP 驅動程式會想“這個流量是什麼?我現在沒有這樣的 TCP 連線處於活動狀態。”並將 TCP 重置封包傳回看似虛假流量的來源,即伺服器。由於衝突的系統與您的MacBook具有相同的IP位址,因此伺服器無法知道TCP Reset實際上不屬於您的連接,因此伺服器會假設TCP Reset意味著想要斷開連線。它不會立即發生,因為發送 TCP 重設封包通常是 TCP/IP 驅動程式中的低優先權作業。

這是 IP 位址衝突的典型症狀。

若要尋找衝突的系統,您可以嘗試檢視網路交換器(如果是託管交換器)或本地網段的 WiFi AP 的 MAC 位址表。如果您的 IP 位址與不屬於您的 MacBook 的 MAC 位址關聯,則您已找到衝突系統的 MAC 位址。在有線網路中,您可以檢查哪個交換器連接埠已看到該 MAC 位址,然後查看電纜另一端的內容。

如果您沒有託管交換器或無法存取它們,您可以嘗試 ping 自己的 IP 位址,看看是否得到重複的答案。或者您可以嘗試使用arping命令列工具對 ARP 封包執行相同的操作:這甚至可以擷取不回應 ping 的系統。

答案2

這個問題的解決方案是在一個完全不同的上下文中安裝的set -e檔案中。/etc/profile.d重新命名該檔案後,ssh登入再次有效。

`set -e` 

如果命令有錯誤,則停止腳本的執行(看這裡)並且被一些人認為是不好的做法。

相關內容