scp上的管道错误

red*_*ess 3 ssh ubuntu

我可以直接进入我的ubuntu盒子,我已经scp将我的应用程序的da版本放到了服务器上,但是当我运行时

scp MaryBaked.tar.gz root@marybakedpdx.com:/home/marybakedpdx

甚至

scp MaryBaked.tar.gz root@marybakedpdx.com:~

scp的进度上升到81%,然后过程说stalled,我得到了

仪式失败:管道破裂失去连接

编辑

root @marybakedpdx:/ home/marybakedpdx #df -T

Filesystem     Type     1K-blocks    Used Available Use% Mounted on
/dev/vda1      ext4      30830588 2906508  26334944  10% /
none           tmpfs            4       0         4   0% /sys/fs/cgroup
udev           devtmpfs    498088       4    498084   1% /dev
tmpfs          tmpfs       101788     356    101432   1% /run
none           tmpfs         5120       0      5120   0% /run/lock
none           tmpfs       508940       0    508940   0% /run/shm
none           tmpfs       102400       0    102400   0% /run/user
Run Code Online (Sandbox Code Playgroud)

fre*_*ude 13

当我复制一个已在本地计算机上打开的文件并且它很忙时,就发生了这种情况。

  • 我的情况确实如此。为什么错误消息不能这么说? (3认同)

avi*_*amg 7

问题是连接关闭了,可能是因为文件太大,会话超时终止。

解决方案 1:从保持会话的服务器(确认)来回发送保持活动消息,使用ServerAliveCountMaxServerAliveInterval选项

scp -o ServerAliveInterval=15 -o ServerAliveCountMax=3 <yourIP>:~
Run Code Online (Sandbox Code Playgroud)

在这个例子中,每 15 秒回顾一次 ack,如果 45 秒 (15*3) 内 3 次 ack 没有回来,则关闭会话。

查看下面的属性文档:

ServerAliveCountMax 设置可以在没有 ssh(1) 从服务器接收任何消息的情况下发送的服务器活动消息的数量(见下文)。如果在发送服务器活动消息时达到此阈值,ssh 将与服务器断开连接,终止会话。需要注意的是,服务器活动消息的使用与 TCPKeepAlive(如下)有很大不同。服务器活动消息通过加密通道发送,因此不会被欺骗。TCPKeepAlive 启用的 TCP keepalive 选项是可欺骗的。当客户端或服务器依赖于知道连接何时变得无响应时,服务器活动机制很有价值。默认值为 3。例如,如果 ServerAliveInterval(见下文)设置为 15 并且 ServerAliveCountMax 保留为默认值,如果服务器变得无响应,

ServerAliveInterval设置超时间隔(以秒为单位),此后如果未从服务器接收到数据,ssh(1) 将通过加密通道发送消息以请求服务器的响应。默认为 0,表示这些消息不会发送到服务器。

解决方案 2:我可以建议您一个简单的解决方法:压缩文件,发送它并将其解压缩到您的目标机器中。这将缩短连接时间并解决超时问题。

gzip bigfile.bin
scp bigfile.bin.gz <destinationIp>:~/
ssh -At <destinationIp>
cd ~
gunzip bigfile.bin.gz
Run Code Online (Sandbox Code Playgroud)


Roy*_*ley 6

尝试限制 - 2Mb/sec max throughput像这样:

scp -l 2000 MaryBaked.tar.gz root@marybakedpdx.com:/home/marybakedpdx
Run Code Online (Sandbox Code Playgroud)