如果端口成功建立后出现故障,SSH ExitOnForwardFailure 不会退出

如果端口成功建立后出现故障,SSH ExitOnForwardFailure 不会退出

我一直在使用 SSH 建立一些远程端口转发。

ssh -NT -o ServerAliveInterval=20 -o ExitOnForwardFailure=yes -o ConnectTimeout=10  -R 22001:localhost:22 -R 59001:localhost:5900 user001@server_host

这似乎运行良好,我可以通过打开的 server_hosts 端口访问客户端计算机上的 ssh 和 vnc。

但我发现偶尔其中一个端口转发在建立后最终会失败,并且这不会导致执行 ExitOnForwardFailure。例如,服务器上的 netstat 显示 22001 处于打开状态,但 59001 已关闭,而在客户端上 ssh 命令仍在顺利运行。

我是否误解了 ExitOnForwardFailure 的这种用法的操作?当我期望它在这种情况下退出时。

如果命令中的两个端口转发中的任何一个失败,我如何确保 SSH 退出,即使在建立它们时没有发生此失败?

答案1

SSH 源中的注释表明该ExitOnForwardFailure选项仅用于在bind(2)失败时退出。

https://github.com/openssh/openssh-portable/blob/9e34e0c59ab04514f9de9934a772283f7f372afe/readconf.h#L35

int exit_on_forward_failure; /* Exit if bind(2) fails for -L/-R */

根据问题,端口的初始绑定已成功。因此ExitOnForwardFailure不会导致退出。

不确定如何产生问题中要求的期望行为。

相关内容