如何在SSH配置中使用通配符(Globbing)通过SSH隧道批量连接多台服务器
如何在SSH配置中使用通配符(Globbing)通过SSH隧道批量连接多台服务器
当然可以!SSH配置本身就支持通配符(也就是globbing),完全能解决你这种需要批量配置多层跳板的场景,不用再一个个手动添加ServerB和ServerC的配置项。下面就给你具体的实现方案:
首先,保留你原来的ServerA配置(因为它是直接可达的第一层跳板):
### 第一层跳板:直接可达的ServerA Host ServerA Hostname 10.0.5.101 User jenny IdentityFile /home/admin/.ssh/serverA
接下来,配置所有ServerB系列主机的通用规则——用Host ServerB*就能匹配所有以ServerB开头的主机(比如ServerB1、ServerB2...ServerBn):
### 所有ServerB系列主机:通过ServerA访问 Host ServerB* HostName %h # %h会自动替换成你输入的主机名(比如ServerB1),ServerA的/etc/hosts会负责解析它的IP User james ProxyJump ServerA IdentityFile /home/admin/.ssh/james # 所有ServerB共用同一个密钥,刚好符合你的情况
最后是ServerC系列主机的配置,分两种情况处理:
情况1:ServerC和ServerB的命名有对应关系(比如ServerC1对应ServerB1、ServerC2对应ServerB2)
这种情况可以用SSH的参数替换自动匹配对应的ServerB跳板,不用手动关联:
### 所有ServerC系列主机:通过对应ServerB访问 Host ServerC* HostName %h # 对应的ServerB的/etc/hosts会解析这个主机名的IP User root # 从ServerCn中提取数字n,自动拼接成ServerBn作为跳板 ProxyJump ServerB${%h#ServerC} IdentityFile /home/admin/.ssh/ServerC1 # 所有ServerC共用同一个密钥
情况2:ServerC和ServerB的命名没有对应关系
如果你的ServerC和ServerB的命名没有规律(比如ServerC1需要通过ServerB3访问),可以在ServerA的/etc/hosts里给ServerC设置带跳板标识的别名,比如把ServerC1的别名设为ServerB3-ServerC1,然后用下面的配置:
### 所有带跳板标识的ServerC主机 Host *-ServerC* # 提取别名中'-'前面的部分作为跳板ServerB ProxyCommand ssh -W %n:%p %r@${%h%-ServerC*} User root IdentityFile /home/admin/.ssh/ServerC1
配置完成后,你直接在本地执行ssh ServerC3或者ssh ServerB5这样的命令,SSH就会自动按照配置走对应的多层跳板,完全不用手动输入复杂的跳转命令。
备注:内容来源于stack exchange,提问作者Cruise5
相关产品推荐
相关产品推荐

