我通过机器 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 中的命令工作正常