Appearance
autossh 快速上手
这是一份速查版,适合直接照着操作。
1. 目标
通过 SSH 连接 100.x.x.x,并在本机开启:
127.0.0.1:1080- 类型:SOCKS5 代理
- 工具:
autossh
2. 安装
bash
brew install autossh
which autossh常见路径:
- Apple Silicon:
/opt/homebrew/bin/autossh - Intel:
/usr/local/bin/autossh
3. 先测试 SSH
bash
ssh your_user@100.x.x.x建议先配免密:
bash
ssh-keygen -t ed25519
ssh-copy-id your_user@100.x.x.x4. 手动后台启动
bash
autossh -M 0 -f -N -D 1080 \
-o "ServerAliveInterval 30" \
-o "ServerAliveCountMax 3" \
-o "ExitOnForwardFailure yes" \
your_user@100.x.x.x5. 开机自启
创建目录:
bash
mkdir -p ~/Library/LaunchAgents文件:
bash
~/Library/LaunchAgents/com.autossh.socks1080.plist内容示例:
xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.autossh.socks1080</string>
<key>ProgramArguments</key>
<array>
<string>/opt/homebrew/bin/autossh</string>
<string>-M</string>
<string>0</string>
<string>-N</string>
<string>-D</string>
<string>1080</string>
<string>-o</string>
<string>ServerAliveInterval=30</string>
<string>-o</string>
<string>ServerAliveCountMax=3</string>
<string>-o</string>
<string>ExitOnForwardFailure=yes</string>
<string>your_user@100.x.x.x</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>KeepAlive</key>
<true/>
<key>StandardOutPath</key>
<string>/tmp/autossh-socks1080.out</string>
<key>StandardErrorPath</key>
<string>/tmp/autossh-socks1080.err</string>
</dict>
</plist>6. 推荐管理命令
新写法比旧的 load/unload 更规范:
bash
launchctl bootstrap gui/$(id -u) ~/Library/LaunchAgents/com.autossh.socks1080.plist
launchctl bootout gui/$(id -u) ~/Library/LaunchAgents/com.autossh.socks1080.plist7. 加到 ~/.zshrc
bash
# autossh launchctl helpers
AUTOSSH_PLIST="$HOME/Library/LaunchAgents/com.autossh.socks1080.plist"
AUTOSSH_DOMAIN="gui/$(id -u)"
AUTOSSH_LABEL="com.autossh.socks1080"
AUTOSSH_OUT_LOG="/tmp/autossh-socks1080.out"
AUTOSSH_ERR_LOG="/tmp/autossh-socks1080.err"
autossh-start() {
launchctl bootstrap "$AUTOSSH_DOMAIN" "$AUTOSSH_PLIST"
}
autossh-stop() {
launchctl bootout "$AUTOSSH_DOMAIN" "$AUTOSSH_PLIST"
}
autossh-reload() {
launchctl bootout "$AUTOSSH_DOMAIN" "$AUTOSSH_PLIST" 2>/dev/null
launchctl bootstrap "$AUTOSSH_DOMAIN" "$AUTOSSH_PLIST"
}
autossh-status() {
echo "== launchctl =="
launchctl print "$AUTOSSH_DOMAIN/$AUTOSSH_LABEL" 2>/dev/null || echo "service not loaded"
echo
echo "== port 1080 =="
lsof -i :1080
}
autossh-log() {
echo "== stdout: $AUTOSSH_OUT_LOG =="
[ -f "$AUTOSSH_OUT_LOG" ] && tail -n 50 "$AUTOSSH_OUT_LOG" || echo "no stdout log"
echo
echo "== stderr: $AUTOSSH_ERR_LOG =="
[ -f "$AUTOSSH_ERR_LOG" ] && tail -n 50 "$AUTOSSH_ERR_LOG" || echo "no stderr log"
}
autossh-log-follow() {
touch "$AUTOSSH_OUT_LOG" "$AUTOSSH_ERR_LOG"
tail -f "$AUTOSSH_OUT_LOG" "$AUTOSSH_ERR_LOG"
}生效:
bash
source ~/.zshrc8. 常用命令
bash
autossh-start
autossh-stop
autossh-reload
autossh-status
autossh-log
autossh-log-follow9. 检查是否成功
看服务:
bash
launchctl list | grep autossh看端口:
bash
lsof -i :1080看错误日志:
bash
cat /tmp/autossh-socks1080.err测试代理:
bash
curl --socks5 127.0.0.1:1080 https://ifconfig.me10. 结论
- 旧命令启动的服务,不必用旧命令停止
- 后续可统一用
bootstrap/bootout - 如果
1080在监听且日志没报错,基本就是成功了 - 现有配置可继续用,不需要重配