在系统启动时自动启动反向ssh隧道

我在防火墙后面有一台远程机器,我想通过SSH连接。 据我所知,这可以通过使用反向ssh隧道来实现。

所以我使用的命令是

ssh -N -f -R 0.0.0.0:1234:localhost:22 -i /home/username/.ssh/id_rsa.pub username@remote-server.com 

我的主要问题是我想在计算机启动时执行此命令,以便在重新启动后可以访问计算机。

我试图通过添加我的用户的crontab和/etc/cron的命令来使用/etc/cron 。 但是我遇到的问题是要求两个命令都有密码。 我创建the id_rsa.pub文件并将其发送到远程服务器,但它仍然无法正常工作。

如果我已登录(例如通过teamviewer),我可以运行该命令,不会询问密码。 如果我以root( sudo )身份运行命令,则会询问rsa文件的(空)密码。 我怀疑我的问题就在这里,即,当cron执行命令时,ssh要求输入密码并且命令挂起。

我已经尝试使用我的用户的rsa文件和root的rsa文件,但没有一个我设法连接。

修复SSH问题

您无法使用公钥对远程计算机进行身份validation,您需要使用私钥来执行此操作。 公钥必须位于远程服务器上。 如果您不确定,那么只需将公钥复制到远程服务器:

 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 username@remote-server.com 

在启动时运行此命令

当你已经使用crontab然后运行crontab -e来编辑你的cron。 在计算机启动后添加以下行以执行该命令。

 @reboot ssh -N -f -R 0.0.0.0:1234:localhost:22 -i /home/username/.ssh/id_rsa username@remote-server.com 

只需添加sleep 60; 在你的ssh命令之前:

 @reboot sleep 60;ssh -N -f -R 0.0.0.0:1234:localhost:22 -i /home/username/.ssh/id_rsa username@remote-server.com after reboot your network is still down