昔日埋雷不經意,今朝踩雷排查難:JetBrains系列IDE使用SFTP連接遠程服務器報“EOF while reading packet”解決方法


寫在前面

這是一篇問題解決記錄。希望能幫到遇到同樣問題的讀者。

強烈建議:請您先看解決步驟一節,如果您發現在下的問題和您的問題不一樣,就可以及時離開本文,避免浪費時間。

正文

問題描述

在使用GoLand連接遠程服務器時遇到了奇怪的問題:通過ssh連接是 successfully connected! 的,但通過SFTP連接就報 EOF while reading packet 錯誤。跟[1](在下的答案也更新到了這里)描述的情況一模一樣。

相關環境如下:

  1. GoLand:2021.3
  2. 遠程服務器:Ubuntu 20.04,非root賬戶(但在下可以登錄root)
  3. 本地系統:Win10

解決過程

1. 網上最普遍的說法是更新密碼(因為密碼已過期)或者重啟IDE。但這兩種方法都不奏效。首先,在下的服務器密碼過期時間是never(讀者可以自行學習如何查看Linux賬戶的密碼過期時間),並且在下更改了密碼后仍然沒有解決問題。其次,重啟IDE毫無幫助。

2. 在下突發奇想,既然GoLang無法SFPT連接遠程服務器,那我直接通過命令行連接呢?這樣就能確定是GoLand的問題還是服務器的問題了。於是,在下打開PowerShell,鍵入命令 sftp -v -P 22 user_name@IP ,回車,提示輸入密碼,輸入密碼再回車,得到了報錯 debug1: Exit status 127 Connection closed 。

3. 在Google上檢索 linux sftp Connection closed 127 ,於是找到了[2][3][4]。至此,問題解決。

原因分析

1. 在下回想起來,之前在服務器上卸載重裝過openssh,當時一通亂搞,很可能就是那個時候“活沒干利索”,導致配置文件中sftp-server的路徑出現了錯誤,雷就此埋下。

2. GoLand的報錯只報了結果而沒有報原因。Connection因為找不到命令(因為路徑沒有配置對,當然找不到了,退出碼127就是“command not found”的意思)而closed了,所以當reading packet時,自然就EOF了。如果死磕“EOF while reading packet”,可能到現在都不能解決問題。

啟發

格局要打開,思維要發散。當一條路走不通時,靜下心來,想想能不能另辟蹊徑,通過某種方法縮小問題排查范圍或者找到問題本質。

解決步驟

  1. 在服務器上 whereis sftp-server ,找到sftp-server的路徑,比如 /usr/libexec/sftp-server 。
  2. 打開ssh_config(多半位於 /etc/ssh/sshd_config ),找到 Subsystem sftp 開頭的一句,看后面的內容。如果后面的內容與步驟1找到的路徑不一樣,那您的問題多半就能解決了;反之,本文幫不了您了。
  3. 將路徑改成正確的路徑,如 Subsystem sftp /usr/libexec/sftp-server ,保存文件。
  4. 重啟sshd。(類似 /etc/init.d/sshd restart 這樣的命令,同理,sshd的路徑可以通過 whereis sshd 查出來)
  5. 重啟IDE,重新連接,成功。(這一步不能省略)

參考:

[1] ftp - SFTP - "EOF while reading packet" error in PhpStorm, works fine in FileZilla - Stack Overflow
[2] SFTP無法連接,報“Connection closed by server with exitcode 127_weixin_39833509的博客-CSDN博客
[3] SFTP error using Cyberduck: EOF while reading packet | DigitalOcean
[4] centos - Can connect via SSH - but not via SFTP? Exit status 127 - Server Fault

寫在后面

希望這篇文章能幫到遇到同樣問題的讀者。由於在下才疏學淺,能力有限,錯誤疏漏之處在所難免,望廣大讀者批評指正,您的批評是在下前進的不竭動力。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM