我有一個帶有 Ubuntu Server 16.04 + VestaCP 的專用伺服器。 SSH 存取運作正常,但 SFTP 發生故障。我不知道它什麼時候壞掉的,但在此之前一切都按預期進行。
當我從本機連接到 sftp 時,它可以工作:
Mar 6 13:52:37 local sftp-server[2120]: session opened for local user user1 from [10.10.80.120]
Mar 6 13:52:37 local sftp-server[2120]: received client version 3
Mar 6 13:52:37 local sftp-server[2120]: debug3: request 1: realpath
Mar 6 13:52:37 local sftp-server[2120]: realpath "."
Mar 6 13:52:37 local sftp-server[2120]: debug1: request 1: sent names count 1
當我嘗試從遠端主機執行此操作時,我得到 1 行:
Mar 6 19:34:06 server sftp-server[3545]: session opened for local user root from [xxx.xxx.xxx.xxx]
沒有任何反應並且連接因逾時而中斷。我沒有收到任何錯誤,也無法確定此問題的原因。
我在 /etc/ssh/sshd_config 中有預設設定:
Subsystem sftp /usr/lib/openssh/sftp-server -l debug3
我不想將其替換為內部 sftp。這應該無需更改即可工作,因為它以前有效。
答案1
當SFTP客戶端連接SFTP伺服器時,第一次資料交換發生的事情是客戶端將其 SFTP 協定版本傳送到伺服器。伺服器使用它願意用於會話的 SFTP 協定版本進行回應,然後客戶端和伺服器從那裡繼續。
您可以在第一個日誌範例中看到客戶端將其版本傳送到伺服器:
3 月 6 日 13:52:37 本機 sftp-server[2120]:收到客戶端版本 3
第二個日誌樣本中缺少該行。最簡單的解釋是客戶端從未發送過它。
簡而言之,第二種情況中使用的 SFTP 用戶端似乎出現故障。它沒有發送應該發送來啟動 SFTP 交換的訊息。