使失败的 SSH 转发成为致命错误

使失败的 SSH 转发成为致命错误

我有一个脚本连接到远程主机以通过 SSH 复制一些文件。我必须连接到侦听端口 873 的 rsync 守护进程。为了实现此目的,我有一个像这样的 ssh 配置。

Host blah
    LocalForward 10873 127.0.0.1:873
    Hostname 10.2.4.1

不幸的是,由于该脚本的时间安排,有时当它尝试建立 SSH 会话时,另一个类似的脚本可能会向不同的主机打开端口。

如果我在另一个 ssh 会话打开时进行连接,我会收到明显的消息地址已被使用

me@local:~$ ssh blah
bind: Address already in use
channel_setup_fwd_listener: cannot listen to port: 10873
Could not request local forwarding.
Linux remote 2.6.26-2-amd64 #1 SMP Tue Jan 25 05:59:43 UTC 2011 x86_64
motd...
remote:~$ 

我想要发生的是让 SSH 客户端立即退出并带有退出代码,这样我就可以在脚本中放入一些逻辑来报告失败,而不是尝试针对转发到错误主机的端口运行任何命令。

答案1

它有一个 ssh 配置选项(来自ssh_config(5)):

转发失败时退出
指定 ssh(1) 在无法设置所有请求的动态、隧道、本地和远程端口转发时是否应终止连接。论证必须是“是”或“否”。默认为“否”。

所以在你的 ssh 配置中你可以添加:

ExitOnForwardFailure yes

或者从命令行:

$ ssh -o ExitOnForwardFailure=yes blah

相关内容