Переключение SSH с псевдонимами и «-F»

У меня есть сервер в частной подсети, к которому я хочу подключиться через машину, которая стоит перед интернет. Для этого есть несколько руководств. Я использовал этот: https://heipei.github.io/2015/02/26/SSH-Agent-Forwarding-considered-harmful/

Проблема в том, что он предполагает, что я могу редактировать файл ~ / .ssh / config . Однако если я запускаю код на CI, Я бы предпочел использовать конфигурационный файл из моего репозитория и использовать переключатель -F . В этом случае указанная выше стратегия перестает работать, поскольку команда ssh , используемая как ProxyCommand , не загружает тот же файл конфигурации и не знает псевдонимов. Я сделал следующее:

Host ansible                                                                    
  User ubuntu                                                                   
  Hostname xxx.compute.amazonaws.com                  

Host app                                                                        
  User ubuntu                                                                   
  Hostname 10.0.2.40                                                            
  ProxyCommand ssh -F test-ssh.cfg -W %h:%p ansible

Это работает, но немного грязно, так как мне нужно поместить имя файла в сам файл, и он сломается, если кто-то изменит имя файла. Итак, мой вопрос: есть ли более чистый способ создать файл конфигурации с псевдонимами и ProxyCommand , который можно было бы использовать с -F ?

3
задан 8 April 2017 в 00:08
3 ответа

Согласно эта запись SuperUser , начиная с версии 7.3p1, имеется Include , поэтому вы можете создать файл конфигурации, который включает вашу «обычную» конфигурацию, но содержит все записи ProxyCommand . Таким образом, если вы укажете этот файл, прокси-соединения будут работать, если вы опустите переключатель -F , будет прочитана конфигурация по умолчанию, например:

~ / .ssh / config :

Host ansible
  User ubuntu
  Hostname xxx.compute.amazonaws.com

~ / .ssh / proxyconfig :

Include config

Host app
  User ubuntu
  Hostname 10.0.2.40
  ProxyCommand ssh -W %h:%p ansible

Если у вас есть конфигурации, подобные приведенным выше, вы можете использовать

ssh -F proxyconfig app

для доступа к серверу «приложений».

Если вы не можете установить вышеупомянутый версии на свой клиентский компьютер, вы можете указать ProxyCommand в командной строке, не требуя отдельного файла конфигурации, например:

ssh -o ProxyCommand='ssh -W %h:%p ansible' app

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

function proxyssh {
    # The first argument is the 'stepping stone',
    # the second is the target to ssh into
    ssh -o proxyCommand="ssh -W %h:%p $1" $2
}

и использовать ее как

proxyssh ansible app
4
ответ дан 3 December 2019 в 04:57

Для прокси хосты, которые вам больше не нужны ProxyCommand . Появилась новая опция ProxyJump , которая делает то же самое без необходимости в другом ssh с настройкой. Он внутренне выполнит ту же команду, но он также передаст аргумент -F , если он предоставлен :

Host ansible                                                                    
  User ubuntu                                                                   
  Hostname xxx.compute.amazonaws.com                  

Host app                                                                        
  User ubuntu                                                                   
  Hostname 10.0.2.40                                                            
  ProxyJump ansible

Эта функция доступна с OpenSSH 7.3 .

4
ответ дан 3 December 2019 в 04:57

Вы могли бы сделать это без редактирование ~ / .ssh / config с использованием ProxyCommand в качестве параметра.

Из OpenSSH 5.4 (2010-03-08) было "netcat mode ":

  • Добавлен 'режим netcat' в ssh (1): ssh -W host: port ... Это подключает stdio на клиенте к одному порту вперед на сервер. Это позволяет, например, использовать ssh как ProxyCommand для маршрутизировать соединения через промежуточные серверы. bz # 1618

Таким образом, можно:

ssh -o ProxyCommand="ssh -W %h:%p firewall" user@10.0.2.40

Для исторических версий вы можете использовать внешний nc (из статьи SSH ProxyCommand Вивека Гите):

ssh -o ProxyCommand='ssh user@firewall nc 10.0.2.40 22' user@10.0.2.40

Где

  • межсетевой экран - это сервер, выходящий в Интернет.
  • 10.0.2.40 - это сервер в локальной сети.
  • netcat ( nc ) используется для установки и установить канал TCP между серверами в вашей локальной сети.
1
ответ дан 3 December 2019 в 04:57

Теги

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