截至 2 天前,scp
对于大于 ~200 KB 的文件,我尝试将文件从笔记本电脑传输到服务器始终失败,并出现错误“client_loop: send disconnect: Broken pipe”这恰逢我的笔记本电脑升级到 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
选项),但这并不是很好,因为它会使传输速度非常缓慢。
我发现在 Norton Internet Security 上禁用“防火墙 -> 连接阻止”解决了我的问题。
不过,在问题得到解决之前,我可能会使用
-l
scp 选项。尝试编辑您的
/etc/ssh/sshd_config
or~/.ssh/config
文件并添加/更新;https://man.openbsd.org/sshd_config.5#ClientAliveInterval
为 SFTP 解决了问题,希望这有助于您调试 SCP。
我最近刚刚更新到 11.3,并且在使用被监禁的帐户设置 SFTP 时遇到了这个问题。在调试过程中,我发现只有在 /etc/ssh/sshd_config 中包含我的入狱帐户的 ChrootDirectory 条目时才会发生此错误。当 ChrootDirectory 被注释掉时,我没有收到这个错误。
我的问题是对被监禁目录上方目录的权限。一旦正确设置,并且 ChrootDirectory 添加回来,然后被监禁的用户和目录按预期工作,没有错误。
有关正确设置权限的信息(即使它引用了豹):
https://macresearch.org/restricted-sftp-mac-os-x-leopard/
好的,在尝试消除所有自由度之后,看起来我找到了罪魁祸首:Norton Internet Security。卸载后者使问题消失。
我在 macOS 11.4 上遇到了同样的问题(从 10.something 升级):
client_loop: send disconnect: Broken pipe
从scp
到客户端,除非我正在使用-l 9000
或更低版本。sftp
并且git
都rsync
受到类似问题的影响,但我可以ssh
没有任何问题。最终,我发现问题出在某些Cisco AnyConnect 套接字过滤器组件上。这就是我可以恢复原始功能的方式:
launchctl unload -w /Library/LaunchAgents/com.cisco.anyconnect.gui.plist
launchctl unload -w /Library/LaunchAgents/com.cisco.anyconnect.notification.plist
然后,从Network Preferences面板中删除所有 Cisco AnyConnect Socket Filter 组件,然后重新启动。当 Cisco 在重新启动时尝试启动过滤器时回答“不允许”。