cronjob 打开然后立即关闭 ssh 隧道

cronjob 打开然后立即关闭 ssh 隧道

我正在尝试编写一个脚本,用于打开通向面向公众的服务器的 SSH 隧道。我已经编写了所有内容并正常运行,但连接似乎无法连接到我的服务器。日志显示以下内容:

Jun 8 21:00:01 <hostname> CRON[xxxx]: session opened for user <user> by (uid=0)
Jun 8 21:00:01 <hostname> CRON[xxxx]: session closed for user <user>

一遍又一遍,中间间隔 0-1 秒。我希望此连接处于打开状态....我怎样才能保持此连接处于打开状态?

我的 cron 代码如下所示(是的,我知道它每分钟都在运行):

* * * * * /bin/bash /home/<user>/ssh

我的入住代码是:

sshpass -p <password> ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null <user>@<url> -p <port> -R222<random_number>:localhost:22

那么,我该如何保持此连接打开?我有一个机制可以在另一个脚本中的适当时间将其终止,但除非我从命令行手动运行上述命令,否则 cron 会立即将其终止。

答案1

您的 crontab 脚本中有几个错误。

  1. 导致断开连接的原因是脚本不仅需要执行权限,还需要设置 suid 位(sudo chmod 4755 /pah/to/script如果您正在使用 root 身份执行 shell 脚本。

  2. crontab 环境与用户环境有很大不同。因此,始终需要使用完整路径命令:

    /usr/bin/sshpass -p <password> /usr/bin/ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null <user>@<url> -p <port> -R222<random_number>:localhost:22
    
  3. 你应该添加标志-t -t远程控制命令(是的,两次),因为这可以抑制无法分配 tty 的错误。

  4. 虽然我确信之前的错误,但有一个可能造成麻烦,我不确定,也没有时间去尝试:你有两个-p您的命令中有很多标志,我不确定它们是否被 shell 正确解释。如果我是你,我会将远程控制命令及其所有选项,放在单引号或双引号内,只是为了尝试。

如果您使用加密密钥,则可以避免前面提到的反对意见和使用公开密码,在这种情况下,您可以添加到您的.ssh/配置归档以下几行:

   Host ShortName
             HostName The.Full.HostName.com
             User yourname
             Port your-non-standard-port
             IdentityFile /path/to/crypto/keyù
             IdentitiesOnly yes

然后一行代码就变成了

  /usr/bin/ssh -t -t -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -R222<random_number>:localhost:22 ServerName

相关内容