У меня есть два набора серверов, один из которых начинается с ab22, а другой начинается с cd22. Для хостов ab22 (ab22 *) мы должны сначала подключиться по ssh к хосту A1, а затем к конкретному хосту. Для хостов cd22 (cd22 *) мы должны сначала использовать ssh для хоста B1, а затем для конкретного хоста.

Я хочу ssh эти хосты прямо из моего домашнего каталога.Это должно SSH имя хоста, который я предоставляю.

Так что, если я предоставлю ab22xyz, он пойдет туда, и если я предоставлю ab22lmn, он должен пойти туда.

Из того, что я смог найти, я чувствую, что он будет использовать файл ~/.ssh/config, но я не могу выполнить эти настройки.

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

Может кто-нибудь, пожалуйста, помогите мне. Мне нужно знать, возможно ли это, и если да, то как это возможно.

Пожалуйста, предоставьте запись в файл хоста.

(У меня настроены ключи для входа в А1 и В1, но не для отдельных серверов)

Пожалуйста помоги. Спасибо

3 ответа3

1

Host принимает не только имена, но и шаблоны. Просто используйте ab22* и cd22* качестве записей Host и настройте их соответствующим образом.

0

Есть несколько вещей, которые вы должны установить, прежде чем все настроить. Во-первых, нет простого способа "перепрыгнуть" между машинами без хитрости, чтобы использовать ваш локальный ключ и аутентифицироваться на другом конце (например, переадресация порта из ssh, флаг -L). Во-вторых, вы не можете на самом деле дать команду SSH перейти на одну машину, а затем подключиться к другой.

Общее имя для шлюзов для входа в инфраструктуру - jumpboxes. Я бы посоветовал вам сгенерировать закрытые ключи как на хосте A1, так и на B1, а затем распределить их открытые ключи соответствующим образом между ab22 * и cd22 *. Это лучшая практика, и если человек в вашей команде решит уйти, у вас есть только два места, где можно удалить свои ключи вместо сотен потенциальных серверов.

Я предлагаю написать крошечный скрипт, который упаковывает двоичный файл ssh, помещает sshes в поле перехода для соответствующего класса хостов (ab22 * и cd22 * соответственно), а затем sshes на конечный компьютер, к которому вы пытаетесь обратиться.

0

Вы можете использовать функцию оболочки, которая ищет шаблоны ab22 * и cd22 * в аргументах ssh и делает все правильно. Предполагая, что вы используете sh, bash или ksh:

myssh () {
   case "$@" in
      ab22*) relay=A1 ;;
      cd22*) relay=B1 ;;
      *) relay="" ;;
   esac
   if test -z "$relay"
   then
      ssh $@
   else
      ssh -t $relay ssh $@
   fi
}

Эта функция, если она помещена в ваш .profile, предоставит вам команду myssh, которая выполняет ssh для A1 или B1 по мере необходимости, прежде чем выполнить ssh до конечного пункта назначения.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .