1

想象一下,我们有动态数量的模式主机

test-1.mydomain.com
test-2.mydomain.com
test-3.mydomain.com
...
test-n.mydomain.com

我想通过不使用全名在每台机器上进行 ssh

ex. ssh test-7.mydomain.com

但只是通过做

ssh test-7

有没有办法使用 ssh 配置来做类似这样的别名的模式?

4

3 回答 3

0

如果您可以选择,您可以在resolv.conf文件中添加一个搜索域(我假设您使用的是 Linux)。

您需要添加这样的一行:

search mydomain.com

它将让 SSH(和大多数其他应用程序)查找test-n, 然后test-n.mydomain.com.

如果您不是resolv.conf自己管理文件(例如,如果您使用 systemd-networkd 或 NetworkManager),则必须在其配置文件中调整搜索域)。

于 2019-02-21T13:30:47.857 回答
0

是的!

是的,有一种方法可以直接在您的 ssh 配置中执行此操作。

  1. host允许模式
  2. hostname允许TOKENS

如何:

将此代码段添加到您的 ssh 配置中~/.ssh/config

# all test-* hosts should match to test-*.mydomain.example.com
host test-*
    hostname %h.mydomain.example.com

核实:

-G您可以使用ssh 的标志来验证这一点。如果您的 ssh 较旧且不支持-G,您可以尝试解析详细的 ssh 输出。

# if your ssh supports -G
% ssh test-17 -G | grep hostname
hostname test-17.mydomain.example.com


# if your ssh does not support -G
% ssh -v -v test-n blarg >/dev/null 2>&1 | grep resolv
debug2: resolving "test-n.mydomain.example.com" port 22
ssh: Could not resolve hostname test-n.mydomain.example.com: Name or service not known

笔记:

SSH 使用匹配的第一个主机行。最好在配置文件的底部添加 PATTERN 主机行。

如果您的test-n名称模式仅包含单个字符后缀,那么您可以使用?模式来进行不那么贪婪的匹配。 test-?将匹配test-1 test-a test-z但不匹配test-10

于 2022-02-04T22:52:52.683 回答
0

您可以创建一个 ssh 配置文件并预先设置您的服务器。

看这个教程,希望对你有帮助!

ssh 配置

您还可以在 bash 文件中创建一个用于 ssh 访问的函数。

像这样:


function ssh_test () {
  [[ $1 =~ ^('test-1'|'test-2'|'test-3')$ ]] || { echo 'Not a valid value !!' && return ;}
  domain=$1.mydomain.com
  ssh my_user@"$domain" 
}
于 2019-02-21T13:03:04.410 回答