我正在尝试设置一个打开 ssh 隧道的 crontab。与这里和 stackoverflow 上的其他问题不同,我连接的服务器有一个 2FA,它会提示用户输入密码。但是,我不想输入任何内容,因为隧道此时已经设置好了,相反,我希望进程处于空闲状态,这样我就可以使用单独的进程运行其他命令。运行命令
ssh <server> -L <tunnelingport>:<remote_host>:<targetport>
在终端中运行正常,我在提示输入 2FA 密码时退出该过程。但是,当我通过 crontab 运行时,我收到 EOFError:
Enter your 2FA password: Traceback (most recent call last):
File "/opt/shellwrap/shellwrap.py", line 74, in <module>
response = str(raw_input('Enter your 2FA password: '))
EOFError: EOF when reading a line
我非常有限的理解是我需要以某种方式管理 stdin。我确信 -n -f -t -T 标志的某种组合可以让我维持隧道而不引发异常,但我完全不知所措。
感谢您的时间!
答案1
尝试使用 ssh“-N”标志。这将阻止 ssh 调用远程系统上的命令:
-N
不执行远程命令。这对于仅转发端口很有用。有关详细信息,请参阅 ssh_config(5) 中 SessionType 的描述。
如果你想把选项放入 ssh 配置文件中,你可以使用选项“SessionType none”,如下所述这里:
会话类型
可用于请求调用远程系统上的子系统,或完全阻止执行远程命令。后者对于仅转发端口很有用。此关键字的参数必须是没有任何(与-N选项),子系统(与-s选项)或默认(shell 或命令执行)。
您可能还想使用-F让 ssh 在身份验证后进入后台的选项,或等效的配置选项身份验证后分叉
。