我一直在使用 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)
失败时退出。
int exit_on_forward_failure; /* Exit if bind(2) fails for -L/-R */
根据问题,端口的初始绑定已成功。因此ExitOnForwardFailure
不会导致退出。
不确定如何产生问题中要求的期望行为。