SSHing на несколько хостов последовательно с моей локальной машины с помощью одной команды - PullRequest
0 голосов
/ 13 декабря 2018

В настоящее время я пытаюсь записать псевдоним, который включает SSHing с моей локальной машины на один хост, где я затем SSH на одну последнюю машину.Мои навыки в bash не совсем нормальны, и я не могу понять, что происходит.

Вот что у меня есть

ssh -A my_user@host_1 -t "get_ip | sed -n 2p | xargs -I {} ssh -T my_user@{}"

В конечном итоге я хотел бы выполнить одну команду с моей локальной машины, которая:

  1. SSHes меня вначальная удаленная машина.Здесь я хочу запустить get_ip и проанализировать вывод этого, что дает мне IP
  2. IP с первого шага - это последний сервер, на котором я хочу подключиться по SSH и запустить активный сеанс (не хочу простовыход).Это то, что я пытаюсь сделать в последней части моей команды.

Другими словами:

Выполнить команду на локальном компьютере -> Выполнить команду на первом удаленном сервере и использоватьвывод этой команды для получения ip для следующей машины -> SSH на последнюю машину с использованием IP-адреса, который я получил -> иметь открытый сеанс на последней машине SSHed в

Сейчас моя текущая команда возвращает:

Connection to host_1 closed

1 Ответ

0 голосов
/ 13 декабря 2018

Настройка конвейера заменяет стандартный ввод (так что ввод поступает из пустого канала, а не из вашего исходного терминала).Используйте подстановку команд вместо xargs и используйте -tt для принудительного выделения TTY на каждом этапе:

ssh -ttA my_user@host_1 'ssh -tt "my_user@$(get_ip | sed -n 2p)"'

Еще лучше:

sshWithCache() {
  ssh \
    -o "ControlPath $HOME/.ssh/control:%h:%p:%r" \
    -o "ControlMaster auto" \
    -o "ControlPersist 5m" \
    "$@"
}

sshIndirectly() {
  local ip
  ip=$(sshWithCache my_user@host_1 'get_ip | sed -n 2p')
  sshWithCache -o "ProxyJump my_user@host_1" "my_user@$ip" "$@"
}

...после чего вы можете запустить sshIndirectly someCommand для вызова someCommand на host_2.Из-за конфигурации ControlPath / ControlMaster создается только одно фактическое SSH-соединение с host_1, и аутентификация выполняется только один раз.

...