所以我有一个 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.波浪号 (
~
) 将解析到您的主目录,但在您未登录时它没有任何意义。根据下一个建议,这不是那么重要,但最好强调一下。相关答案。我的建议是以这种方式重写脚本:或更好地使用
/the/full/path/to/
而不是$HOME
.-f
在命令执行之前请求 ssh 进入后台。-N
不要执行远程命令。这对于仅转发端口很有用。2. SSH 密钥只对其所有者可读,因此其他用户不能使用它们,也不能在系统范围内使用。所以我的建议是使用 Cron 来完成这项任务。
使用拥有 SSH 密钥的用户登录并运行
crontab -e
(-e
表示编辑),或使用sudo -u <user-name> crontab -e
(-u
表示以调用的用户身份执行<user-name>
)并在底部添加以下行:保存并关闭 Crontab。此行应在系统启动时执行脚本并写入日志。
参考:
man ssh
更新: