44

我有一个无头 Ubuntu 服务器。我从我的 Mac 通过 SSH 在服务器上运行了一个命令(snapraid 同步)。指挥部说大约需要6个小时,所以我把它留了一个晚上。

今天早上我下来时,Mac 上的终端说:“写入失败:管道损坏”

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

4

10 回答 10

50

这应该可以解决 Mac osX 版本的问题:10.8.2

添加:

ServerAliveInterval 120
TCPKeepAlive no

到这个文件:

~/.ssh/config

或者,如果您希望它是 SSH 客户端中的全局更改,请到此文件

/private/etc/ssh_config

“ServerAliveInterval 120”基本上是说每隔 120 秒用 NULL 数据包“ping”服务器,而“TCPKeepAlive no”表示不设置 SO_KEEPALIVE 套接字选项(因为您不应该在已经设置 ServerAliveInterval 的情况下需要它,显然它是“可欺骗的” "或一些奇怪的)。

服务器同样有一些可以设置为相同效果的东西(ClientKeepAliveInterval),但通常您无法控制这些设置。

于 2013-02-19T16:22:31.867 回答
23

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

有关详细信息,请参阅“人屏”。

于 2013-09-25T18:25:07.307 回答
6

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

ServerAliveInterval 120
TCPKeepAlive yes

到 /etc/ssh/ssh_config 文件

于 2016-03-21T10:09:44.853 回答
4

我会推荐 tmux 而不是 screen,它是一个(可以说)更好的 screen竞争对手

tmux new-session -s {name}

该命令创建一个会话。之后您想要连接的任何时间:

tmux a -t {name}
于 2014-12-27T14:41:00.080 回答
2

有两种解决方案

  1. 更新服务器并重新启动服务器 sshd

echo "ClientAliveInterval 60" | sudo tee -a /etc/ssh/sshd_config

  1. 更新客户端

echo "ServerAliveInterval 60" >> ~/.ssh/config

于 2015-04-28T16:39:07.810 回答
2

在尝试更改 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 

希望它会有所帮助

于 2018-12-04T09:32:09.033 回答
1

如果您在编辑 /etc/ssh/sshd_config 后仍有问题,或者您的机器上根本不存在 ~/.ssh/config,那么我强烈建议您重新安装 ssh。这个解决方案花了大约一分钟时间来解决“Broken pipe”错误和“close by remote host”错误。

sudo apt-get purge openssh-server

sudo apt update

sudo apt install openssh-server
于 2019-01-15T06:38:21.390 回答
0

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

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

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

于 2015-06-29T19:12:00.620 回答
-1

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

于 2019-02-21T08:57:58.657 回答
-2

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

于 2018-04-14T17:45:32.803 回答