Конфигурация ssh для доменов DNS

У меня есть две платформы со многими серверами, к которым я хочу подключиться через ssh.

У меня есть в resolv.conf

search domain1.net domain2.org

Так что у меня есть только имя машины для ввода для ssh .

Я хочу иметь конфигурацию ssh для каждого домена :

  • администратор пользователя для каждой машины пользователя domain1.net
  • root для каждой машины domain2.org

Как я могу этого добиться?

Хост , Директивы Hostname , похоже, работают только с тем, что вы вводите в команде ssh, а не с тем, что расширяется с помощью DNS-суффиксов

1
задан 2 August 2018 в 10:53
4 ответа

Я считаю, что OpenSSH МОЖЕТ делать канонизацию. Обратите внимание на следующие параметры на странице руководства ssh_config:

  • CanonicalizeHostname
  • CanonicalizeFallbackLocal
  • CanonicalizeMaxDots
  • CanonicalizePermittedCNAMEs
  • Host
  • Сопоставьте с каноническим параметром

    Пожалуйста, укажите

    обратите внимание, для этого может потребоваться более новая версия OpenSSH, чем та, которая у вас есть (у меня 7.4p1).

1
ответ дан 3 December 2019 в 23:13

Как сказал Касперд, на самом деле это невозможно.

Некоторые обходные пути:

  • Я просто использую некоторые небольшие переменные оболочки для расширения $ e до example.org для вещей, к которым я редко обращаюсь. Остальные перечислены в ~ / .ssh / config в любом случае с коротким именем. Вы используете его так:

     ssh www. $ E
     

    При этом вы можете использовать стандартный метод ~ / .ssh / config .

  • Другой вариант: напишите небольшой сценарий оболочки или функцию оболочки для ssh, которая перехватывает имя хоста и расширяет его, примерно так:

     #! / Bin / bash
    hn = `host $ 1 |  вырезать -d '' -f 1`
    ssh $ hn
     

    Если вы вызовете его с помощью sshwrapper.sh www , он расширит www на www.example.org и будет использовать его для ssh .

0
ответ дан 3 December 2019 в 23:13

подтверждая то, что сказал @sven, крошечная функция bash может делать то же самое:

ssh() {
    declare h=$(host $1 | head -n 1 | cut -d ' ' -f 1)
    command ssh $h
}

Поместите это где-нибудь в один из ваших исходных файлов, например .profile, и он всегда исправляет имя из порядка поиска в /etc/resolv.conf

0
ответ дан 3 December 2019 в 23:13

другой подход, который может пригодиться для других использует (относительно) новые функции ssh_config, которые позволяют включать файлы, и даже включение может быть условным.

Я просто собираюсь поделиться запутанным примером из моей конфигурации, который проверяет, что если

  • мой телефон подключен через USB, и
  • у меня нет другого сетевого подключения (у меня нет маршрут по умолчанию)

Затем он будет включать другой файл, который направляет некоторые ssh-вещи через мой телефон

Match exec "[ -e /dev/serial/by-id/usb-SAMSUNG_SAMSUNG_Android_XXXXXXXX-if01 ] && ! ip route| grep -q ^default"
    Include blahblah_termux.ssh

У вас должен быть ~ / .ssh / domain1.ssh & ~ / .ssh / domain2.ssh и включать те, которые основаны на тесте Match (ваш тест, очевидно, будет адаптирован)

0
ответ дан 1 April 2020 в 23:36

Теги

Похожие вопросы