Appearance
autossh 常见问题
1. autossh 是干什么的?
它是在 ssh 基础上增加自动重连能力的工具,适合长期保持 SSH 隧道,比如本地 SOCKS 代理。
2. 这次配置的 1080 是本机端口还是远端端口?
是本机端口。
这次配置对应的是:
text
127.0.0.1:1080也就是本机 SOCKS5 代理。
3. -D 1080 是什么意思?
表示在本机开启一个动态代理端口,也就是 SOCKS5 代理端口。
4. 为什么不用普通 ssh,而用 autossh?
因为普通 ssh 断了就断了,而 autossh 更适合长时间挂着,会自动重连。
5. -M 0 是什么意思?
表示关闭 autossh 自带的监控端口。
这通常更简单,也能减少额外端口占用。
6. -N 是什么意思?
表示不执行远端命令,只建立隧道。
7. -f 是什么意思?
表示启动后转入后台运行。
8. 为什么建议加 ServerAliveInterval 和 ServerAliveCountMax?
因为它们能让 SSH 更快发现连接已经失效,从而让 autossh 及时重连。
9. ExitOnForwardFailure=yes 有什么用?
如果端口转发没成功,它会直接退出,避免出现“命令执行了但代理没真正起来”的假成功。
10. 为什么建议做 SSH 免密登录?
因为开机自启时通常没有机会手动输入密码,不做免密登录会让自启不稳定甚至失败。
11. launchctl load/unload 和 bootstrap/bootout 有什么区别?
load/unload 是老写法,很多时候还能用。bootstrap/bootout 是现在更推荐的写法,更符合新版 macOS 的 launchd 管理方式。
12. 我已经用旧命令启动了服务,需要用旧命令停止吗?
不需要。
可以直接用新命令停止和重载,因为它们操作的是同一个 launchd 服务。
13. 我需要重新配置 plist 吗?
如果当前服务已经正常工作,通常不需要。
切换到新命令管理服务,不等于要重做配置。
14. 怎么判断服务已经成功启动?
至少看这三项:
bash
launchctl list | grep autossh
lsof -i :1080
cat /tmp/autossh-socks1080.err更稳妥的验证方式是:
bash
curl --socks5 127.0.0.1:1080 https://ifconfig.me15. 1080 在监听,是不是就一定能用?
不一定。
端口监听只说明本地服务起来了,不代表代理一定能正常出网。最好还是用 curl --socks5 再测一次。
16. 日志是空的,是不是就说明完全没问题?
也不一定。
日志为空通常说明没有明显报错,但仍然建议做一次代理可用性测试。
17. 开机后没自动启动,最常见原因是什么?
最常见的是 SSH 免密登录没有配置好,或者 plist 里的 autossh 路径写错了。
18. 排查问题时最有效的办法是什么?
通常是把命令以前台方式跑一次,也就是去掉 -f,这样最容易直接看到错误输出。
19. 为什么要在 ~/.zshrc 里加函数?
因为这样后续管理服务更方便,不用反复手写很长的 launchctl 命令。
20. 最常用的几个快捷命令是什么?
bash
autossh-start
autossh-stop
autossh-reload
autossh-status
autossh-log
autossh-log-follow21. autossh-log 里一直是 ssh: connect to host ... port 22: Operation timed out,一定是远端 SSH 没开吗?
不一定。
这次真实案例里,远端 sshd 是正常的,最终问题出在:
- Tailscale
grants只配置了tailscale.com/cap/relay - 但没有补成员之间普通网络访问的
ip授权
结果就是:
tailscale ping通- 普通
ssh 100.x.x.x:22不通 autossh也就一直报超时
最终通过补下面这条修复:
json
{
"src": ["autogroup:member"],
"dst": ["autogroup:member"],
"ip": ["*"]
}