На работе у нас есть несколько серверов, к которым мы можем подключаться только по 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
?