我有一个运行 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
稳定失败。
例如,远程转发psql
和ssh
:
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