scp 和 sftp 失败,出现“client_loop:发送断开连接:管道损坏”(MacOS 11.3 问题?)

scp 和 sftp 失败,出现“client_loop:发送断开连接:管道损坏”(MacOS 11.3 问题?)

从 2 天前开始,我尝试将scp笔记本电脑上的文件传输到服务器时,如果文件大于 ~200 KB,就会出现以下错误“client_loop:发送断开连接:管道损坏”这与我的笔记本电脑升级到 MacOS 11.3(从 11无论那之前是什么)。

$ dd if=/dev/urandom of=test.dat count=400 2> /dev/null && ls -l test.dat && scp test.dat $DST
-rw-r--r--  1 xxxx  staff  204800 Apr 28 11:27 test.dat
test.dat                                        0%    0     0.0KB/s   --:-- ETAclient_loop: send disconnect: Broken pipe
lost connection

这绝对是新问题,因为我几乎每天都在使用 scp,在更新之前从未遇到过问题。这种行为在我用作目标的 2 种不同服务器架构(NAS 和 Raspberry Pi - 排除偶然的服务器配置错误)以及使用我的 Linux 桌面作为客户端(同样没有问题)时也可见。同样奇怪的是,问题出现在普通 SSH 和 Homebrew SSH 安装中,这暗示 SSH 客户端配置问题或网络堆栈中的错误。我很好奇是否有其他人也观察到了同样的问题。sftp表现出同样的问题。

在服务器端,我在日志中得到的内容如下:

May  1 23:27:27 myhost sshd[21774]: Bad packet length 116136902.
May  1 23:27:27 myhost sshd[21774]: ssh_dispatch_run_fatal: Connection from user pi XXX.XXX.XXX.XXX port 59948: Connection corrupted

PS 解决此问题的一个[非常不完美的]方法是使用足够低的带宽限制(-l选项),但这并不是很好,因为它会使传输速度变得非常慢。

答案1

SFTP 的问题已解决,希望这有助于您调试 SCP。

我最近刚刚更新到 11.3,在使用被监禁的账户设置 SFTP 时遇到了这个问题。在调试中,我发现只有当我在 /etc/ssh/sshd_config 中包含被监禁账户的 ChrootDirectory 条目时才会发生此错误。当 ChrootDirectory 被注释掉时,我没有收到此错误。

我的问题是被监禁目录上方目录的权限问题。正确设置后,再添加 ChrootDirectory,被监禁用户和目录便可按预期工作,不会出现任何错误。

有关正确设置权限的信息(即使它引用了豹子):

https://macresearch.org/restricted-sftp-mac-os-x-leopard/

答案2

我发现禁用 Norton Internet Security 上的“防火墙 -> 连接阻止”可以解决我的问题。

-l不过,在问题解决之前,我可能会使用scp 选项。

答案3

尝试编辑您的/etc/ssh/sshd_config 或者 ~/.ssh/config文件并添加/更新;

ClientAliveInterval 300

https://man.openbsd.org/sshd_config.5#ClientAliveInterval

答案4

我在 macOS 11.4(从 10 升级)上遇到了同样的问题。某物):client_loop: send disconnect: Broken pipescp到客户端,除非我使用的是-l 9000或以下。sftpgitrsync都受到类似问题的影响,但我可以ssh毫无问题地完成。最后,我发现问题出在一些Cisco AnyConnect 套接字过滤器成分。

这就是我恢复原始功能的方法:

launchctl unload -w /Library/LaunchAgents/com.cisco.anyconnect.gui.plist

launchctl unload -w /Library/LaunchAgents/com.cisco.anyconnect.notification.plist

然后,从网络偏好设置面板,然后重新启动。当 Cisco 试图在重新启动后启动过滤器时,回答“不允许”。

相关内容