如果端口转发失败,如何让 ssh 失败

如果端口转发失败,如何让 ssh 失败

我有一个运行 ssh 来创建端口转发的 bash 脚本,使用如下命令:

ssh -N -i keyfile -L 1000:localhost:22 *remote_ip*

有时候监听端口可能很忙,所以此命令会出现错误:

channel_setup_fwd_listener: cannot listen to port: 1000
Could not request local forwarding.

但是,ssh 连接仍然打开,并且 ssh 命令被阻止。当这种情况发生时,我怎样才能让 ssh 真正失败,以便我的脚本能够处理它?

不幸的是,我还需要在 Solaris(Intel)上支持此功能,并且那里的 ssh 命令不支持 ExitOnForwardFailure 选项 - 在这种情况下有什么想法吗?

答案1

如果您检查 ssh 手册页,您会发现有一个名为 ExitOnForwardFailure 的配置选项,您可以在命令行中通过添加来指定它:

-o "ExitOnForwardFailure yes"

所有 ssh 配置选项均在 ssh_config 和 sshd_config 手册页中描述。如果您发现不支持该选项,则可能需要升级到较新版本的 ssh。

祝你好运。

答案2

您也可以将其添加ExitOnForwardFailure yes 到您的'~/.ssh/config'文件中。

如果您还没有,请创建一个。

确保正确的用户拥有该文件。

sudo service ssh restart在 unbuntu 上重新启动 ssh 服务。

答案3

仅 ExitOnForwardFailure 可能还不够。

尝试使用 -o ExitOnForwardFailure=yes-o ServerAliveInterval=10并使-o ServerAliveCountMax=3稳定失败。

例如,远程转发psqlssh


ssh -NC -o ExitOnForwardFailure=yes \
-o ServerAliveInterval=10 \
-o ServerAliveCountMax=3 \
-R remote_dev_ip:5432:127.0.0.1:5432 \
-R remote_dev_ip:2222:127.0.0.1:22 \
tun@remote_dev

参考

相关内容