我有一个无头 Ubuntu 服务器。我从我的 Mac 通过 SSH 在服务器上运行了一个命令(snapraid 同步)。指挥部说大约需要6个小时,所以我把它留了一个晚上。
今天早上我下来时,Mac 上的终端说:“写入失败:管道损坏”
我不确定该命令是否完全执行。这是超时问题吗?如果是这样,我怎样才能让 SSH 连接在一夜之间保持活跃?
这应该可以解决 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),但通常您无法控制这些设置。
您可以为此使用“屏幕”实用程序。只需通过 SSH 连接到服务器,通过执行“screen”命令启动屏幕会话,在那里启动您的命令并断开连接(不要退出屏幕会话)。当您认为您的命令已经完成时,您可以连接到服务器并附加到您的屏幕会话,您可以在其中查看命令执行结果/进度(以防万一)。
有关详细信息,请参阅“人屏”。
这应该可以解决 ubuntu 和 linux mint 添加的问题:
ServerAliveInterval 120
TCPKeepAlive yes
到 /etc/ssh/ssh_config 文件
我会推荐 tmux 而不是 screen,它是一个(可以说)更好的 screen竞争对手
tmux new-session -s {name}
该命令创建一个会话。之后您想要连接的任何时间:
tmux a -t {name}
有两种解决方案
echo "ClientAliveInterval 60" | sudo tee -a /etc/ssh/sshd_config
echo "ServerAliveInterval 60" >> ~/.ssh/config
在尝试更改 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
希望它会有所帮助
如果您在编辑 /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
jeremyforan 的回答是正确的,但是我发现如果您尝试使用scp,则有必要明确地将其指向如上所述配置的配置文件,它似乎不遵守配置的正常层次结构。例如:
scp -F ~/.ssh/config myfile joe@myserver.com:~
有效,而省略 -F 仍会导致管道损坏错误。
Ubuntu:
ssh -o ServerAliveInterval=5 -o ServerAliveCountMax=1 user@x.x.x.x
我使用带有两条互联网输入线的华硕路由器。我将我的 IP 指定给某条线路,它可以工作。