假设我们有动态数量的模式主机
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 config来像这样做类似别名的模式??
发布于 2019-02-21 21:03:04
您可以创建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-21 21:30:48
如果可以,您可以在resolv.conf文件中添加搜索域(我假设您使用的是Linux)。
您需要添加一行,如下所示:
search mydomain.com它将让SSH (和大多数其他应用程序)先查找test-n,然后查找test-n.mydomain.com。
如果您不是自己管理resolv.conf文件(例如,如果您使用systemd-networkd或NetworkManager ),则必须在其配置文件中调整搜索域。
发布于 2022-02-04 22:52:53
是!
是的,有一种方法可以直接在您的ssh配置中执行此操作。
方法:
将此代码片段添加到您的ssh配置~/.ssh/config
# all test-* hosts should match to test-*.mydomain.example.com
host test-*
hostname %h.mydomain.example.com验证:
您可以使用ssh的-G标志来验证这一点。如果您的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使用匹配的第一条主机行。在配置文件的底部添加您的模式主机行是一种好的做法。
如果您的test-n名称模式只包含一个字符后缀,那么您可以使用?模式来进行不那么贪婪的匹配。test-?将匹配test-1 test-a test-z,但不匹配test-10
https://stackoverflow.com/questions/54805759
复制相似问题