Ssh

SCP 可重現地破壞 SSH 管道

  • June 2, 2017

我正在嘗試使用 .將一些證書複製到我的伺服器上scp

$ scp ./cert.* sshuser@192.168.0.42:/tmp/

cert.crt     100% 2386     0.1KB/s   00:18
packet_write_wait: Connection to 192.168.0.42 port 22: Broken pipe
lost connection

第一個文件被寫入伺服器,但不完全,因為雜湊和與原始文件不匹配。

每次我嘗試訪問scp這些文件(crtkey)時都會發生這種情況p12

使用 Ubuntu 16.10 ( OpenSSH_7.3p1 Ubuntu-1, OpenSSL 1.0.2g 1 Mar 2016) 和 Windows 10 ( WinSCP 5.9.4) 測試。兩者都無法複製文件。

值得一提的是,我已連接到 OpenVPN 伺服器,以便訪問目標伺服器 (192.168.0.42) - 但這應該不是問題。

為什麼管道會中斷,我怎樣才能成功地將文件 scp 到伺服器上?

*編輯:*正如評論中所建議的,這很可能與 MTU 有關 - 但是,我不太確定如何解決此問題。

降低 OpenVPN 連接的 MTU 對我有用。

從 OpenVPN 手冊:

–mssfix max 通知在隧道上執行的 TCP 會話,它們應該限制其發送數據包的大小,以便在 OpenVPN 封裝它們之後,OpenVPN 發送給其對等方的最終 UDP 數據包大小不會超過最大字節數。預設值為 1450。

max參數的解釋方式與–link-mtu參數相同,即添加了封裝成本後的UDP數據包大小,但不包括UDP頭本身。生成的數據包對於 IPv4 最多為 28 個字節,對於 IPv6 最多為 48 個字節(IP 標頭為 20/40 字節,UDP 標頭為 8 個字節)。預設值 1450 允許通過具有 MTU 1473 或更高的鏈路傳輸 IPv4 數據包,而無需 IP 級別分段。

–mssfix 選項僅在您使用 UDP 協議進行 OpenVPN 對等通信時才有意義,即 –proto udp。

–mssfix 和 –fragment 可以理想地一起使用,其中 –mssfix 將首先嘗試阻止 TCP 需要數據包分段,並且如果大數據包無論如何通過(來自 TCP 以外的協議), –fragment 將在內部將它們碎片化。

–fragment 和 –mssfix 都旨在解決路徑 MTU 發現在 OpenVPN 對等點之間的網路路徑上被破壞的情況。

這種故障的常見症狀是 OpenVPN 連接成功啟動,但在活動使用期間停止。

如果–fragment 和–mssfix 一起使用,–mssfix 將從–fragment max 選項中獲取其預設的max 參數。

因此,可以使用以下選項將最大 UDP 數據包大小降低到 1300(解決與 MTU 相關的連接問題的一個很好的第一次嘗試):

–tun-man 1500 –fragment 1300 –mssfix

我在 OpenVPN 配置中添加了以下內容:

mssfix 1200

我還假設可以調整此值以獲得更好的性能。

引用自:https://unix.stackexchange.com/questions/368728