以下是我的信息:
我有一个 SSH 连接用作 SOCKS5 代理。每次我用电脑唤醒时都必须重新初始化它,这很烦人。
我已经设置
ServerAliveInterval
为60
in~/.ssh/config
.我没有权限添加ClientAliveInterval
,即使我添加了也会产生完全相同的效果。我收到的具体错误消息是“管道损坏”。
screen
或者tmux
在这里没有帮助,我每次都必须附加,这让我们回到了 numero uno。autossh
似乎不起作用。我运行autossh -M 0 -DPORT alias
并在任务管理器中看到它,但 SSH 连接似乎没有重新启动,甚至在等待 5 分钟后也没有。
我读过很多问题,说要使用上述三个选项之一,但没有一个涉及唤醒和挂起。我无法将其放入某些 bash 初始化脚本中,因为我只希望它发生一次(当我登录计算机时)。但同时,我希望我的 SSH 连接在我使用计算机时断开时仍保持活动状态。我利用哪些效果组合来实现我的目标?
答案1
连接持久性
持久连接需要服务器端的支持。这在当前的 openssh 服务器中不可用(并且看起来也不会)。
客户端部分是几年前实现的,著名的UseRoaming
该功能几周前已从 openssh 中删除。该功能从未起作用,并且是一大安全漏洞。它可能适用于appgate.com
SSH 服务器,但我第一次听说这个漏洞。
客户端/服务器活动间隔仅在 TCP 保持活动期间有效,当然,如果您在挂起和唤醒之间没有更改 IP 地址的话。
网络启动后的脚本
我会考虑针对您的情况使用ifup
脚本(在网络接口启动后运行的脚本)的解决方案。它可能看起来像这样/sbin/ifup-local
,您可以在其中启动 SOCKS5:
#!/bin/sh
if [[ "$1" == "eth0" ]]
then
ssh -DPORT alias
else
#DO_NOTHING
fi
不要忘记使脚本可执行sudo chmod +x /sbin/ifup-local
。您还可以向该脚本添加更多检查和内容,区分网络接口或其他内容。来源
答案2
(有点离题的答案,但它可能对你的情况有用)
您可以尝试通过基于 UDP 的 OpenVPN 运行 ssh(如果您的防火墙允许)。这种方法是有效的,尽管重新连接时的延迟相当大(一分钟左右)。
但是,如果您能够使用它,请尝试莫什。它从一开始就考虑了连接持久性。