启动时自动 SSH 实际上正在启动,但它没有映射命令?

启动时自动 SSH 实际上正在启动,但它没有映射命令?

所以我有一个 Ubuntu 16.04 系统,每次系统启动时,它都应该运行我编写的 SSH 脚本。这是我第一次尝试让它工作,所以以前从来没有过。

脚本非常简单:

while true; do sleep 60; ssh root@ip -i ~/.ssh/key -R xxxx:localhost:22; done

它位于名为 的文件中autossh.sh

为了使脚本自动运行,我尝试将其包含在 /etc/rc.local 中(退出 0 之前),我尝试将其添加到 Ubuntu 的 GUI 的启动应用程序列表中。

在我两次重启计算机时,我都可以看到脚本确实在运行,但它并没有像命令应该做的那样将远程端口映射到 localhost 22。如果我手动运行命令,它会起作用,但它在启动时不起作用。

我是否遗漏了某些明显的东西,导致该脚本无法正常工作?

答案1

1.波浪号 ( ~) 将解析为您的主目录,但当您未登录时,它没有任何意义。根据下一个建议,这并不那么重要,但最好强调一下。相关答案。我在这里的建议是按如下方式重写脚本:

#!/bin/bash
while true; do sleep 60; ssh root@ip -i "$HOME/.ssh/key" -N -f -R xxxx:localhost:22; done
  • 或者更好地使用/the/full/path/to/而不是$HOME

  • -f请求 ssh 在命令执行之前进入后台。

  • -N不执行远程命令。这对于仅转发端口很有用。

2.SSH 密钥仅对其所有者可读,因此其他用户无法使用它们,并且它们不能在系统范围内使用。所以我的建议是使用 Cron 来完成这项任务。

以拥有 SSH 密钥的用户身份登录并运行crontab -e-e表示编辑),或使用sudo -u <user-name> crontab -e-u表示以调用的用户身份执行<user-name>)并在底部添加此行:

@reboot /full/path/to/the/script/autossh.sh > /tmp/autossh.log 2>&1

保存并关闭 Crontab。此行应在系统启动时执行脚本,并将写入一个日志

参考:


更新:

相关内容