Динамические псевдонимы для размещения в конфигурации 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.

  1. hostпозволяет ШАБЛОНЫ
  2. hostnameпозволяет ТОКЕНЫ

Как:

Добавьте этот фрагмент в конфигурацию 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 и предварительно настроить свои серверы.

Посмотрите этот урок, я надеюсь, он вам поможет!

Конфигурация 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), вам придется настроить поисковые домены в их файлах конфигурации).

Другие вопросы по тегам