写入失败:管道损坏

时间:2012-11-05 08:31:03

标签: ssh terminal

我有一个无头的Ubuntu服务器。我在Mac上通过SSH在服务器上运行命令(snapraid sync)。该命令表示需要大约6小时,所以我把它留了一夜。

当我今天早上下来时,Mac上的终端说:“写失败:破管”

我不确定命令是否完全执行。这是超时问题吗?如果是这样,我怎样才能在一夜之间保持SSH连接?

10 个答案:

答案 0 :(得分:47)

这应解决Mac OSX版本的问题:10.8.2

添加:

ServerAliveInterval 120
TCPKeepAlive no

到这个文件:

~/.ssh/config

或者,如果您希望它是SSH客户端的全局更改,请this file

/私有的/ etc / ssh_config中

“ServerAliveInterval 120”基本上表示每隔120秒用一个NULL数据包“ping”服务器,而“TCPKeepAlive no”表示不设置SO_KEEPALIVE套接字选项(因为你不需要它已经设置了ServerAliveInterval,显然它是“可欺骗的”或有些奇怪的。

服务器同样可以设置相同的效果(ClientKeepAliveInterval),但通常你无法控制这些设置。

答案 1 :(得分:22)

您可以使用“screen”util。只需通过SSH连接到服务器,通过“screen”命令执行启动屏幕会话,在那里启动命令并断开连接(不要退出屏幕会话)。当您认为您的命令已经完成时,您可以连接到服务器并附加到您可以看到命令执行结果/进度的屏幕会话(如果有的话)。

有关详细信息,请参阅“man screen”。

答案 2 :(得分:6)

这应该解决ubuntu和linux mint的问题 添加:

ServerAliveInterval 120
TCPKeepAlive yes

要 / etc / ssh / ssh_config文件

答案 3 :(得分:4)

而不是屏幕我建议使用tmux,(可以说)更好competitor来屏幕

tmux new-session -s {name}

该命令创建会话。之后的任何时候你想要连接:

tmux a -t {name}

答案 4 :(得分:2)

有两种解决方案

  1. 更新服务器并重新启动服务器sshd
  2. echo "ClientAliveInterval 60" | sudo tee -a /etc/ssh/sshd_config

    1. 更新客户
    2. echo "ServerAliveInterval 60" >> ~/.ssh/config

答案 5 :(得分:1)

如果在编辑/ etc / ssh / sshd_config后仍然遇到问题,或者〜/ .ssh / config 根本就不存在您的计算机上,那么我强烈建议您重新安装ssh。该解决方案花了大约一分钟的时间来解决“管道损坏”错误和“被远程主机关闭”错误。

sudo apt-get purge openssh-server

sudo apt update

sudo apt install openssh-server

答案 6 :(得分:0)

jeremyforan的回答是正确的,但我发现如果您尝试使用 scp ,则必须明确指向配置文件,如上所述,它似乎不遵守正常配置层次结构。例如:

scp -F ~/.ssh/config myfile joe@myserver.com:~

有效,省略-F仍会导致管道错误。

答案 7 :(得分:0)

尝试更改sshd_config中的许多上述参数(ClientAliveInterval,ClientMaxCount,TCPKeepAlive ...)后,没有任何变化。我花了数小时和数天的时间在论坛和博客上寻找解决方案...

看来,禁止与ssh / sftp连接的管道损坏的问题来自ChrootDirectory上的权限设置。 ChrootDirectory必须以755权限由root / root拥有 较低的权限765/766/775 ...不起作用,但权限较高的角色(例如700) 如果需要授予连接用户的写权限,则可以在子目录中授予它。 如果chroot由sftpUser:sftpGroup拥有,则两者都不起作用...

chroot-> root:root 755
| 
---subdirectories-> sftpUser:sftpGroup 700 up to 770 

希望这会有所帮助

答案 8 :(得分:-1)

Ubuntu:
ssh -o ServerAliveInterval=5 -o ServerAliveCountMax=1 user@x.x.x.x

答案 9 :(得分:-2)

我使用带有两条互联网输入线的华硕路由器。我指定我的IP到某一行,它可以工作。