我正在尝试在从 ubuntu 盒子启动时自动启动到我的服务器的 SSH 隧道。我有一个安装在 18 轮大卡车上的 ubuntu 盒子,并通过无线网卡联网。盒子托管一个 mysql 数据库,我试图在无线网卡连接时复制该数据库。由于我无法确定我的 IP 以及我位于多少个路由器或哪些路由器后面,因此我使用 SSH 隧道连接到我的复制服务器。我使用以下命令使其正常工作:
ssh -R 3307:localhost:3307 [email protected]
现在我希望它在盒子运行时启动,并且一直处于活动状态,因此我安装了 auto-ssh 并设置了这个小脚本:
ID=xkenneth
HOST=erdosmiller.com
AUTOSSH_POLL=15
AUTOSSH_PORT=20000
AUTOSSH_GATETIME=30
AUTOSSH_DEBUG=yes
AUTOSSH_PATH=/usr/bin/ssh
export AUTOSSH_POLL AUTOSSH_DEBUG AUTOSSH_PATH AUTOSSH_GATETIME AUTOSSH_PORT
autossh -2 -fN -M 20000 -R 3307:localhost:3306 ${ID}@${HOST}
我尝试将此脚本放入 /etc/init.d/ 中,并在 /etc/network/interfaces 中使用 post-up 命令,并将其放入 /etc/network/if-up.d/ 中。在这两种情况下,脚本都会在启动时启动,但隧道似乎没有正确建立。手动运行时,脚本可以正常工作。
答案1
如果它运行正常但未连接,我会怀疑它正在超前,没有等到网络连接。尝试通过在脚本开头添加睡眠来延迟隧道。sleep 60
可能会完成这项工作,不确定您的连接建立速度有多快。
我怀疑这是因为如果第一次尝试不成功,autossh 就会放弃。摘自 README:
If the ssh session fails with an exit status of 1 on the very first
try, autossh will assume that there is some problem with syntax or
the connection setup, and will exit rather than retrying;
请注意,它还表示您可以设置AUTOSSH_GATETIME
为 0 来禁用该行为。
答案2
运行脚本时,您是否手动输入密码?如果是这样,您必须使用 SSH 密钥设置无密码登录。