autossh 无法在 rc.local 上运行

autossh 无法在 rc.local 上运行

我通过机器 A(本地,在多个路由器后面)B(中间人)和 C(远程,我试图从中访问 A 的机器)配置了反向 ssh 隧道

将所有相关密钥放在所有机器上之后,如果我这样做

autossh -M 10984 -o "PubkeyAuthentication=yes" -o "PasswordAuthentication=no -i /home/user/.ssh/id_rsa.pub 9999:localhost:22 user@machine-B

在机器A上,我可以通过端口9999从机器C连接到机器B(中间人)到A。

现在,我添加了

autossh -M 10984 -N -f -o "PubkeyAuthentication=yes" -o "PasswordAuthentication=no -i /home/user/.ssh/id_rsa.pub 9999:localhost:22 user@machine-B &

到我的/etc/rc.local文件,因此该命令将在启动时执行,重新启动,现在隧道将不起作用。我收到一个错误

autossh[1966]: starting ssh (count 14)
autossh[1966]: ssh child pid is 4916
autossh[1966]: ssh exited with error status 255; restarting ssh 

在系统日志上。

我的/etc/rc.local有:

autossh -M 10984 -N -f -o "PubkeyAuthentication=yes" -o "PasswordAuthentication=no" -i /home/user/.ssh/id_rsa.pub -R 9999:localhost:22 user@machine-B &
ethtool -s eth0 autoneg on
exit 0

知道我可能做错了什么吗?

更新:我注意到虽然

autossh -M 10984 -N -f -o "PubkeyAuthentication=yes" -o "PasswordAuthentication=no" -i /home/user/.ssh/id_rsa.pub -R 9999:localhost:22 user@machine-B

在命令行上工作,sudo-ing它:

sudo autossh -M 10984 -N -f -o "PubkeyAuthentication=yes" -o "PasswordAuthentication=no" -i /home/user/.ssh/id_rsa.pub -R 9999:localhost:22 user@machine-B

使命令行提示我输入公钥密码,即使它没有附加密码。我读到另一个堆栈问题(我找不到),该-f标志阻止ssh要求进一步的输入。由于thigsrc.local以root身份运行(据我所知),我认为这就是为什么它autossh不断创建ssh未成功退出的进程。事实上,删除该-f标志会使 ubuntu 继续创建窗口,提示我输入密码。创建密钥时我没有输入密码。

答案1

我假设您遵循此网站的指示: https://raymii.org/s/tutorials/Autossh_persistent_tunnels.html

正如您正确观察到的那样,尝试执行

sudo autossh -M 10984 -N -f -o "PubkeyAuthentication=yes" -o "PasswordAuthentication=no" -i /home/user/.ssh/id_rsa.pub -R 9999:localhost:22 user@machine-B

导致启动时自动失败的附加提示。

一种简单的解决方案是将 SSH 密钥从“用户”复制到 root。

cp /home/user/.ssh/id_rsa.pub /root/.ssh/id_rsa.pub
cp /home/user/.ssh/id_rsa /root/.ssh/id_rsa -R

这对我来说没问题。复制是从“root”帐户执行的,因此所有权自动设置为“root”。然后从终端(而不是启动)运行 autossh 命令,以便 root 知道主机。修改启动命令以包含根文件夹中密钥的新路径,然后就完成了。

答案2

相同的任务,解决如下:

在机器A上:sudo su root并运行autossh,它询问密钥不知道?回答“ok”,然后就可以毫无问题地连接,并且 rc.local 中的命令工作正常

相关内容