Skip to content

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.x

4. 手动后台启动

bash
autossh -M 0 -f -N -D 1080 \
  -o "ServerAliveInterval 30" \
  -o "ServerAliveCountMax 3" \
  -o "ExitOnForwardFailure yes" \
  your_user@100.x.x.x

5. 开机自启

创建目录:

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.plist

7. 加到 ~/.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 ~/.zshrc

8. 常用命令

bash
autossh-start
autossh-stop
autossh-reload
autossh-status
autossh-log
autossh-log-follow

9. 检查是否成功

看服务:

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.me

10. 结论

  • 旧命令启动的服务,不必用旧命令停止
  • 后续可统一用 bootstrap/bootout
  • 如果 1080 在监听且日志没报错,基本就是成功了
  • 现有配置可继续用,不需要重配