Rug*_*man 2 ssh configuration bash regular-expressions
我有一堆名称为 srv1.domain.com、srv2.domain.com、...、srv50.domain.com 的服务器
我希望能够通过以下方式连接到这些服务器 ssh srv1
我不想将 50 个配置条目放到我的 .ssh/config 中,例如
HOST srv1
HOSTNAME srv1.domain.com
USER amac
IdentityFile /home/amac/.ssh/id_rsa
Run Code Online (Sandbox Code Playgroud)
我喜欢的是正则表达式匹配,它允许我写一些类似的东西
HOSTNAME (srv[0-9]*).domain.com
HOST \1
USER amac
IdentityFile /home/amac/.ssh/id_rsa
Run Code Online (Sandbox Code Playgroud)
这可能吗?也许通过创建一个 bash 别名将“srv(.*)”的所有实例转换为 srv\1.domain.com,其中 \1 对应于正则表达式匹配的括号中的子字符串?
谢谢。
小智 5
Host *.*
Hostname %h
Host *
Hostname %h.domain.com
IdentityFile /path/to/keyfile.pem
Run Code Online (Sandbox Code Playgroud)
第一条规则匹配任何普通域名,并且只传递域名。第二条规则处理单个单词 hosts 并将 domain.com 附加到末尾。
这样做的一个副作用是,即使是对 anotherdomain.com 的 ssh 调用,ssh 也会尝试将 IdentityFile 用于 domain.com。然而,我认为这并不重要。
小智 5
您可以使用ProxyCommand在regex命令行上指定的主机名。
Host srv*.domain.com
User amac
ProxyCommand nc $(sed -e "s/.domain.com//" <<< "%h") %p
IdentityFile /home/amac/.ssh/id_rsa
Run Code Online (Sandbox Code Playgroud)
现在ssh srv23.domain.com将连接到srv23.
请注意,您不需要指定HostName.
| 归档时间: |
|
| 查看次数: |
9082 次 |
| 最近记录: |