我有两个平台,我想通过 ssh 连接到许多服务器。
我在 resolv.conf
search domain1.net domain2.org
所以我只有要输入 ssh 的机器名称。
我希望每个域都有一个 ssh 配置:
- domain1.net 的每台机器的用户 admin
- domain2.org 的每台机器的 root 用户
我怎样才能做到这一点?
Host , Hostname指令似乎只适用于您在 ssh 命令中键入的内容,而不适用于使用 DNS 后缀扩展的内容
我有两个平台,我想通过 ssh 连接到许多服务器。
我在 resolv.conf
search domain1.net domain2.org
所以我只有要输入 ssh 的机器名称。
我希望每个域都有一个 ssh 配置:
我怎样才能做到这一点?
Host , Hostname指令似乎只适用于您在 ssh 命令中键入的内容,而不适用于使用 DNS 后缀扩展的内容
我相信 OpenSSH 可以进行规范化。请查看 ssh_config 手册页中的以下选项:
canonical
与选项匹配请注意,这可能需要比您拥有的版本更新的 OpenSSH 版本(我有 7.4p1)。
正如 kasperd 所说,这实际上是不可能的。
一些解决方法:
我只是使用一些小的 shell 变量来扩展我不经常访问的东西
$e
。无论如何,其他人都以短名称example.org
列出。~/.ssh/config
你像这样使用它:有了这个,您可以使用标准
~/.ssh/config
方法。另一种选择:为 ssh 编写一个小的包装脚本或 shell 函数来捕获主机名并扩展它,如下所示:
如果您使用 调用它
sshwrapper.sh www
,它将扩展www
为www.example.org
并将其用于ssh
.支持@sven 所说的,一个小的 bash 函数可以做同样的事情:
把它放在你的一个源文件中的某个地方,例如 .profile,它总是从 /etc/resolv.conf 中的搜索顺序修复名称
另一种可能对其他人有用的方法利用(相对)新的 ssh_config 功能,这些功能允许包含文件,甚至包含可以是有条件的。
我只是要从我的配置中分享一个混淆的示例,该示例测试是否
然后它将包含另一个文件,该文件通过我的手机路由一些 ssh 内容
您应该能够拥有 ~/.ssh/domain1.ssh & ~/.ssh/domain2.ssh 并包含基于 Match 测试的那些(您的测试显然是定制的)