在运行systemd的系统中autossh是否冗余?创建持久反向SSH隧道时是否有用?
在systemd系统中用autossh做持久反向SSH隧道,有用吗?
咱直接说结论:有用,但得看你怎么配置它。
先聊聊你提到的autossh -M 0的情况:
- 当把监控端口设为0时,autossh确实会关闭自带的链路监控功能,这时候它的角色就像一个简单的"看门狗"——只有当SSH进程意外退出时,它才会自动重启SSH,重新建立隧道。
- 这种模式下,它的价值在于帮你省了自己写复杂监控逻辑的功夫。虽然systemd本身也有
Restart=always这类配置能实现进程退出就重启,但autossh是专门为SSH隧道场景设计的工具,用它来封装重启逻辑,有时候比手动调整systemd服务文件更省心。
不过这里得提一下新版OpenSSH的替代方案:
- 新版OpenSSH自带了
ServerAliveInterval和ServerAliveCountMax这两个参数,能让SSH本身主动检测连接状态。比如你可以在SSH配置文件(或者命令行参数里)加上:
意思是每隔30秒给服务器发一个存活探测包,如果连续3次没收到回应,SSH就会主动退出。这时候不管是用autossh -M 0,还是直接让systemd监控SSH进程并重启,都能保证隧道持续运行。ServerAliveInterval 30 ServerAliveCountMax 3
那到底选autossh还是纯systemd?
- 如果你已经习惯了autossh的用法,或者需要兼容一些老系统,那
autossh -M 0配合systemd服务是个很稳妥的选择。 - 如果你更倾向于用系统原生工具,那直接配置SSH的存活参数+systemd的
Restart=always,也能达到一样的持久化效果。
内容的提问来源于stack exchange,提问作者Guy




