从 cron 运行时远程端口转发断开连接

Posted

技术标签:

【中文标题】从 cron 运行时远程端口转发断开连接【英文标题】:Remote port forwarding disconnected when run from cron 【发布时间】:2021-04-30 02:03:36 【问题描述】:

我已经安装了 FreeBSD,需要定期运行反向 shell 来建立和保持与客户端的 SSH 连接(没有公共 IP)。从终端运行ssh -R 脚本时,它按预期工作,但是当我将其作为 cron 命令运行时,连接随即建立并断开。

这是来自服务器的 auth.log:

Jan 26 08:50:00 sshd[9696]: Accepted publickey for XXXX from XXX.XXX.XXX.XXX port XXXXX ssh2: RSA SHA256: xxxxxxxxx
Jan 26 08:50:00 sshd[9696]: pam_unix(sshd:session): session opened for user XXXX by (uid=0)
Jan 26 08:50:00 systemd: pam_unix(systemd-user:session): session opened for user XXXX by (uid=0)
Jan 26 08:50:01 systemd-logind[458]: New session 107 of user XXXX.
Jan 26 08:50:01 sshd[9794]: Received disconnect from XXX.XXX.XXX.XXX port XXXXX:11: disconnected by user
Jan 26 08:50:01 sshd[9794]: Disconnected from user XXXX XXX.XXX.XXX.XXX port XXXXX
Jan 26 08:50:01 sshd[9696]: pam_unix(sshd:session): session closed for user XXXX
Jan 26 08:50:01 systemd-logind[458]: Session 107 logged out. Waiting for processes to exit.
Jan 26 08:50:01 systemd-logind[458]: Removed session 107.

您有什么想法,是什么导致了这种行为以及如何解决它?

【问题讨论】:

cron 可能是一个奇怪的解决方案(它不是定期执行的操作,而是您想要永久执行的会话)。 superuser.com/questions/37738/… 之类的东西怎么样 我的意图是在重新启动后或使用玉米以更长的时间间隔运行脚本。感谢您的链接。不幸的是,由于某种原因,我无法安装 autossh。无论如何,如果我理解得很好,这个工具就是保持 ssh 连接处于活动状态。如果在建立连接后立即发送断开信号,我不确定它是否会起作用。 好吧,我假设问题是ssh -R 也会打开一个交互式shell 到目标服务器,而cron 不是交互式的,所以它无法从stdin 读取。 -N 开关可能会有所帮助。来自运行 crond 的计算机的日志也可能有用。 谢谢。与此同时,我找到了这个链接:everythingcli.org/… 我使用了ssh -f -T -N -R 的组合,它可以工作。 【参考方案1】:

已解决 - 请参阅上面的帖子。谢谢

【讨论】:

以上是关于从 cron 运行时远程端口转发断开连接的主要内容,如果未能解决你的问题,请参考以下文章

如何修复 ngrok 转发端口?

如何修复监听端口 80 的远程端口转发失败

SSH 远程端口转发

Windows端口转发(Port Forwarding in Windows)

SSH -R 远程端口转发

SSH 内网端口转发实战