我有一台位于防火墙后面的远程机器,希望通过 SSH 连接。据我所知,这可以通过使用反向 ssh 隧道来实现。
所以我使用的命令是
ssh -N -f -R 0.0.0.0:1234:localhost:22 -i /home/username/.ssh/id_rsa.pub [email protected]
我的主要问题是我想在计算机启动时执行此命令,以便计算机在重新启动后可以访问。
我尝试通过在用户的 crontab 和 中添加命令来使用 cron /etc/cron
。但是我遇到的问题是这两个命令都要求输入密码。我创建了the id_rsa.pub
文件并将其发送到远程服务器,但似乎仍然不起作用。
如果我已登录(例如通过 teamviewer),我可以运行该命令,并且不会询问密码。如果我以 root 身份运行该命令(sudo
),则会询问 rsa 文件的(空)密码。我怀疑我的问题就在这里,即当 cron 执行命令时,ssh 会要求输入密码,并且命令会挂起。
我尝试使用我的用户的 rsa 文件和根的 rsa 文件,但都无法连接。
答案1
只需在 ssh 命令前添加“sleep 60;”即可:
@reboot sleep 60;ssh -N -f -R 0.0.0.0:1234:localhost:22 -i /home/username/.ssh/id_rsa [email protected]
重启后您的网络仍然处于故障状态。
答案2
在结合多个来源后,我创建了一个自动启动反向 ssh 通道的服务。配置文件和必要的步骤如下: 在此存储库中
答案3
更好的解决方案可能是自动SSH:
“autossh 是一个启动 ssh 副本并对其进行监视的程序,当其死机或停止传输流量时,根据需要重新启动它。”
正如引文所说,这还具有提供“始终在线”功能的额外好处。
答案4
修复 SSH 问题
您无法使用以下方式验证远程计算机民众密钥,你需要使用私人的密钥才能执行此操作。公钥必须在远程服务器上。如果您不确定,只需将公钥复制到远程服务器,如下所示:
ssh-copy-id -i ~/.ssh/id_rsa.pub username@remoteserver
然后使用私钥运行命令:
ssh -N -f -R 0.0.0.0:1234:localhost:22 -i /home/username/.ssh/id_rsa [email protected]
在启动时运行此命令
既然您已经使用了 crontab,那么请运行crontab -e
以编辑您的 cron。添加以下行以在计算机启动后执行该命令。
@reboot ssh -N -f -R 0.0.0.0:1234:localhost:22 -i /home/username/.ssh/id_rsa [email protected]