![為什麼我的 ssh 登入後立即被刪除?](https://rvso.com/image/1606684/%E7%82%BA%E4%BB%80%E9%BA%BC%E6%88%91%E7%9A%84%20ssh%20%E7%99%BB%E5%85%A5%E5%BE%8C%E7%AB%8B%E5%8D%B3%E8%A2%AB%E5%88%AA%E9%99%A4%EF%BC%9F.png)
我正在嘗試透過 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`
如果命令有錯誤,則停止腳本的執行(看這裡)並且被一些人認為是不好的做法。