如何配置SSH优先尝试22端口,失败后自动尝试备用端口(如5492)?
实现SSH客户端自动重试备用端口的方案
当然可以做到!我自己折腾服务器的时候也遇到过同样的问题——每次改了SSH端口后,要么手动加-p参数要么挨个配config,实在麻烦。下面给你几个简单实用的方法:
方法一:通过SSH配置文件(~/.ssh/config)实现自动重试
这是最优雅的方式,直接在你的SSH客户端配置里加规则,所有主机默认先试22端口,失败后自动切到5492:
打开~/.ssh/config(如果没有就新建一个,记得把权限设为600),添加以下内容:
Host * # 先尝试22端口,超时1秒;失败则尝试5492端口 ProxyCommand nc -w 1 %h 22 || nc %h 5492
简单解释参数:
%h是SSH配置的占位符,自动替换成你要连接的主机名/IP-w 1设置nc的超时时间为1秒,避免等待太久影响体验||是shell的逻辑或,只有前面的nc命令连接失败(返回非0值)时,才会执行后面的5492端口连接命令
如果有个别服务器确实只用22端口,不想触发重试逻辑,可以在config里单独给它加配置(SSH配置从上到下匹配优先):
Host my-fixed-port-server Hostname your-server-ip.com Port 22
方法二:写个简单的Shell脚本封装SSH命令
如果你觉得配置文件的方式有点绕,也可以写个小脚本帮你自动重试:
- 新建一个文件比如
ssh-auto,内容如下:
#!/bin/bash # 先尝试连接22端口 ssh -p 22 "$@" # 如果连接失败(退出码非0),再尝试5492端口 if [ $? -ne 0 ]; then echo "22端口连接失败,尝试5492端口..." ssh -p 5492 "$@" fi
- 给脚本加执行权限:
chmod +x ssh-auto
- 之后用这个脚本代替原来的
ssh命令就行,比如:
./ssh-auto username@your-server-ip
甚至可以把它加到你的PATH里,或者给它加个别名:
alias ssh='~/path/to/ssh-auto'
这样直接敲ssh username@host就会自动重试了。
小提示
- 如果你用的是macOS,系统自带的nc参数和Linux略有不同,要是上面的ProxyCommand不好使,可以试试
nc -G 1 %h 22 || nc %h 5492(-G用来设置超时秒数) - 超时时间别设太长,1-2秒足够了,不然每次连接慢的服务器会等很久
内容的提问来源于stack exchange,提问作者Riley
相关产品推荐
相关产品推荐

