如果 SSH 退出后前端端口仍能接受连接,就检查全部三个单元。激活套接字、systemd-socket-proxyd 辅助单元以及 SSH 创建的 SOCKS 监听器各有不同的生存周期:

套接字辅助单元SSH解读
监听中未激活未激活可能正在正常等待需求
监听中已激活已激活进程存在;但后续目标的健康状况仍未得到证明
监听中已激活未激活前端可以在没有后端的情况下接受工作

把辅助单元与 SSH 一起启动并不能定义之后的停止转换。对于不得在没有隧道时保持激活的辅助单元,systemd 文档给出了更强的关系:

[Unit]
BindsTo=ssh-socks.service
After=ssh-socks.service

在实际设计中把它应用到合适的单元。Requires= 与顺序只解决关系的一部分。否则,已经激活的前端在后端消失后可能再也不会触发激活。还要检查失败单元的状态和启动频率限制;依赖不会覆盖这些限制。

接下来建立启动就绪条件。After= 只对任务排序,并不代表 Type=simple SSH 监听器已就绪。固定睡眠在认证缓慢时可能失败。请使用能确立所需监听器的启动契约;ExitOnForwardFailure=yes 捕获的是转发设置失败,而不是之后的目标可达性。

最后,定义空闲退出与重新激活。转发守护进程的空闲退出选项针对的是没有活动连接,而不是已打开连接上没有字节。安静的会话可以让它保持活动。下一次需求应激活所需服务,重启循环应保持有界且可见。重建监听器会接纳新连接;它不会恢复旧的代理 TCP 会话。

相关文章