从 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,被监禁用户和目录便可按预期工作,不会出现任何错误。
有关正确设置权限的信息(即使它引用了豹子):
答案2
我发现禁用 Norton Internet Security 上的“防火墙 -> 连接阻止”可以解决我的问题。
-l
不过,在问题解决之前,我可能会使用scp 选项。
答案3
尝试编辑您的/etc/ssh/sshd_config
或者 ~/.ssh/config
文件并添加/更新;
ClientAliveInterval 300
答案4
我在 macOS 11.4(从 10 升级)上遇到了同样的问题。某物):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
然后,从网络偏好设置面板,然后重新启动。当 Cisco 试图在重新启动后启动过滤器时,回答“不允许”。