autossh
:用于保持 SSH 隧道的工具
autossh
是一个用于自动重连和保持 SSH 会话的工具,特别适用于需要长期保持 SSH 隧道连接的场景。如果 SSH 会话意外断开(例如网络中断或主机故障),autossh
会自动重新建立连接,非常适合 MongoDB 副本集反向隧道配置。
安装 autossh
1. 在 Ubuntu 上安装
sudo apt update
sudo apt install autossh
2. 在 Windows 上使用
- Windows 系统本身不支持
autossh
,可以借助 WSL(Windows Subsystem for Linux) 或其他 SSH 客户端(如 PuTTY 和 Cygwin)实现类似功能。
基本用法
1. 基本命令格式
autossh [options] -R remote_port:local_host:local_port user@remote_host
示例:
建立一个反向 SSH 隧道,将本地的 27017
端口映射到远程主机的 27018
:
autossh -f -N -R 27018:localhost:27017 user@remote_host
参数说明:
-f
:让autossh
在后台运行。-N
:不执行远程命令,仅用于端口转发。-R
:反向端口转发,将远程的remote_port
转发到本地。user@remote_host
:SSH 目标主机和登录用户。
2. 自动化保持 SSH 隧道
使用环境变量简化配置
通过设置 AUTOSSH_PORT
,可以指定用于监控连接的本地端口(避免冲突):
export AUTOSSH_PORT=20000
autossh -f -N -R 27018:localhost:27017 user@remote_host
保持连接(启用探测)
默认情况下,autossh
会使用额外的端口探测连接状态,可以通过以下命令启用探测功能:
AUTOSSH_GATETIME=0 autossh -M 0 -f -N -R 27018:localhost:27017 user@remote_host
参数说明:
- -M 0
:禁用额外探测端口(默认会占用一个端口进行探测)。
- AUTOSSH_GATETIME=0
:立即重新启动连接,而不等待。
实用案例
1. MongoDB 副本集反向隧道
将内网 MongoDB 的 27017
端口通过反向隧道映射到外网服务器的 27018
端口:
autossh -f -N -R 27018:localhost:27017 user@ubuntu_public_ip
在远程主机上,可以通过以下命令访问内网的 MongoDB:
mongosh --host localhost --port 27018
让 autossh
自动启动
1. 使用 Systemd 服务
创建一个 Systemd 单元文件,让 autossh
在系统启动时运行。
步骤:
-
创建服务文件:
bash sudo nano /etc/systemd/system/autossh-tunnel.service
-
添加以下内容: ```ini [Unit] Description=Autossh tunnel for MongoDB After=network.target
[Service] User=your_user Environment="AUTOSSH_GATETIME=0" ExecStart=/usr/bin/autossh -f -N -R 27018:localhost:27017 user@remote_host Restart=always
[Install] WantedBy=multi-user.target ```
-
启用并启动服务:
bash sudo systemctl enable autossh-tunnel sudo systemctl start autossh-tunnel
-
检查服务状态:
bash sudo systemctl status autossh-tunnel
2. 使用 cron
定时任务
如果不使用 Systemd,可以使用 cron
定期检查并启动隧道。
编辑 cron
配置
crontab -e
添加任务
每分钟检查并运行 SSH 隧道:
* * * * * pgrep -f "autossh.*-R 27018" || autossh -f -N -R 27018:localhost:27017 user@remote_host
注意事项
-
SSH 公钥认证 使用 SSH 公钥认证避免输入密码:
bash ssh-keygen -t rsa ssh-copy-id user@remote_host
-
连接探测稳定性 确保远程服务器的 SSH 端口正常开放。如果网络不稳定,建议设置较短的重连时间。
-
安全性
- 限制远程端口访问:
在
sshd_config
中添加绑定限制:ini AllowTcpForwarding yes GatewayPorts no
autossh
是一种简单、可靠的解决方案,可以帮助保持 MongoDB 副本集的反向隧道连接,非常适合内外网混合部署的场景。