Skip to content

autossh 配置决策记录

这份文档用于记录本套配置中的关键选择,以及为什么这样选。

1. 为什么选 autossh

决策:

  • 使用 autossh,而不是只用普通 ssh

原因:

  • 目标是长期挂一个 SSH 隧道
  • 普通 ssh 断开后不会自动恢复
  • autossh 更适合做长期稳定连接
  • 更适合配合 macOS 的 launchd

结论:

  • 对“本地长期 SOCKS 代理”这个场景来说,autossh 是更合适的选择

2. 为什么使用本地 SOCKS 代理

决策:

  • 使用 -D 1080 开启本地 SOCKS5 代理

原因:

  • 目标是让本机通过 SSH 隧道访问外部网络
  • SOCKS5 方式更灵活
  • 很多工具和浏览器都能直接使用本地 SOCKS 代理

结论:

  • 当前方案的本质是:通过远端机器提供本机网络出口

3. 为什么选 1080 端口

决策:

  • 初始默认端口使用 1080

原因:

  • 1080 是 SOCKS 代理常见端口
  • 容易记忆
  • 对单实例场景足够清晰

补充:

  • 如果本机已有端口占用,也可以改为 78901081 等其他端口

结论:

  • 1080 不是强制要求,而是一个合理的默认值

4. 为什么建议加保活参数

决策:

  • 使用:
    • ServerAliveInterval=30
    • ServerAliveCountMax=3
    • ExitOnForwardFailure=yes

原因:

  • 更快发现失效连接
  • 避免表面启动成功、实际代理没起来
  • autossh 的重连机制更及时生效

结论:

  • 这组参数可以显著提升长期运行稳定性

5. 为什么建议做 SSH 免密登录

决策:

  • 建议配置 SSH key 登录

原因:

  • 开机自启通常不能依赖人工输密码
  • 否则 launchd 托管服务很容易卡住或失败

结论:

  • 免密登录几乎是“稳定开机自启”的前置条件

6. 为什么用 LaunchAgent

决策:

  • 使用 ~/Library/LaunchAgents/com.autossh.socks1080.plist

原因:

  • 这是 macOS 用户级自启动的标准方式
  • 适合登录后自动拉起
  • 便于和 launchctl 配合管理

结论:

  • 对当前用户自己的代理需求来说,LaunchAgent 是自然选择

7. 为什么推荐 bootstrap/bootout

决策:

  • 日常管理命令优先使用:
    • launchctl bootstrap
    • launchctl bootout

原因:

  • load/unload 是旧写法
  • 新写法更符合现代 macOS launchd 模型
  • 指定 gui/$(id -u) 更明确

结论:

  • 现有配置不需要重做,但后续管理命令建议统一迁移到新写法

8. 为什么现有配置不需要重配

决策:

  • 不重写现有 plist

原因:

  • 已经验证服务可以正常加载
  • 本地 1080 已在监听
  • 日志中没有明显错误
  • 说明配置本身已经可用

结论:

  • 新旧命令差异主要在管理方式,不代表已有配置失效

9. 为什么要在 ~/.zshrc 中加函数

决策:

  • 把常用管理动作封装成 shell 函数

原因:

  • 平时最常用的操作很固定
  • 原始 launchctl 命令偏长
  • 简化后更方便日常维护和排障

结论:

  • 这是为了提高使用体验,不是功能必需项,但非常推荐

10. 为什么后面补了这么多文档

决策:

  • 把单次问答扩展为文档目录

原因:

  • 后续查找更方便
  • 可以支持复用、交接、扩展到多实例
  • 避免以后重复整理同样的问题

结论:

  • 这套资料已经不只是一次配置记录,而是一套可持续使用的 autossh 知识库