1

На работе у нас есть несколько серверов, к которым мы можем подключаться только по SSH с нашего сервера Jumpbox .

Время от времени мне нужно выполнить команду на этих серверах. Например, если я хочу выполнить df -H на сервере-1, я запускаю эту команду:

ssh jumper@jumpbox 'ssh admin@server-1 ''dh -H'''

У нашего jumpbox есть ключи для SSH на server-1 , а на моей локальной рабочей станции есть ключи для SSHing в jumpbox .

Чтобы упростить это, я написал скрипт с именем jumpbox.sh который выглядит следующим образом:

#!/usr/bin/env bash
ssh jumper@jumpbox @

Тогда я могу просто бежать

jumpbox.sh ssh admin@server-1 dh -H

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

Я нашел несколько статей, а также некоторые вопросы , на StackOverflow , которые обсуждают , как с помощью ProxyCommand мы можем достичь этого, но я не могу заставить его работать.

Прежде всего, руководство говорит это о ProxyCommand:

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

Если я не ошибаюсь, это означает, что если у меня есть следующая конфигурация:

Host server-1
    ProxyCommand  ssh jumper@jumpbox nc %h %p

И тогда на моей раковине я выполняю

ssh server-1 dh -H

Тогда dh -H будет игнорироваться. Похоже, что ProxyCommand полезен при открытии нового интерактивного сеанса SSH, но не запускает одноразовые команды. Это правильно?

Также я не совсем понимаю, какова роль nc здесь?

Подводя итог, мой вопрос:

Есть ли способ настроить мою среду, используя ~/.ssh/config и т.д., Чтобы при запуске ssh admin@server-1 dh -H , например, команда запускалась через сервер jumpbox ?

1 ответ1

0

Да... Вы можете достичь с помощью ProxyCommand. С вашей рабочей станции попробуйте запустить "ssh admin @ server-1 dh -H" .. это будет выполнено exec ssh -q nc server-1 22 ... Таким образом, Proxycommnad помогает подключить клиентский сервер, после подключения клиентская оболочка выполнит команду, которую вы дали с вашей рабочей станции.

так что ... ваш ~/.ssh/config должен иметь следующую запись

Хост-сервер * ProxyCommand ssh -q перемычка @ jumpbox nc% h% p StrictHostKeyChecking = нет

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