Динамические псевдонимы для размещения в конфигурации SSH
Представьте, что у нас есть динамическое число хостов шаблона
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, чтобы сделать шаблон как псевдонимы, как это??
3 ответа
Да!
Да, есть способ сделать это прямо в вашей конфигурации ssh.
Как:
Добавьте этот фрагмент в конфигурацию ssh
~/.ssh/config
:
# all test-* hosts should match to test-*.mydomain.example.com
host test-*
hostname %h.mydomain.example.com
Проверять:
Вы можете проверить это с помощью флага 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
Вы можете создать конфигурационный файл 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"
}
Если это вариант для вас, вы можете добавить поисковый домен в resolv.conf
файл (я предполагаю, что вы находитесь в Linux).
Вам нужно было бы добавить такую строку:
search mydomain.com
который будет иметь SSH (и большинство других приложений) искать test-n
, затем test-n.mydomain.com
,
Если вы не управляете resolv.conf
подайте файл самостоятельно (например, если вы используете systemd-networkd или NetworkManager), вам придется настроить поисковые домены в их файлах конфигурации).