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

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

我有一台位于防火墙后面的远程机器,希望通过 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]

相关内容