Назад | Перейти на главную страницу

SSH через несколько хостов с использованием ProxyCommand?

У меня дома есть запись в ~ / .ssh / config на моем домашнем компьютере, которая выглядит так:

host foo bar
    ProxyCommand ssh -x -a -q gateway.example.com nc %h 22

где gateway.example.com - это рабочий сервер, подключенный как к общедоступному Интернету, так и к внутренней сети. Блок шлюза разрешает foo и bar, используя записи в / etc / hosts.

Моя проблема в том, что мне нужно дотянуться до коробки, которая находится на другой стороне foo. Назовем это «базой». Хост «baz» находится в другой частной сети, к которой подключен foo, но не в той, к которой подключен «шлюз».

Я пробовал использовать это:

host baz
    ProxyCommand ssh -x -a -q gateway/example.com ssh foo nc %h 22

Но это не работает, и я немного не в себе. Как мне это сделать?

Не думаю, что это должно иметь значение, но я делаю это в Ubuntu 10.

Легко.

Предположим следующую настройку сети:

Вы должны иметь возможность использовать файл ~ / .ssh / config, который выглядит примерно так:

host foo bar
    ProxyCommand ssh -x -a -q gateway.example.com nc %h 22

host baz
    ProxyCommand ssh -x -a -q foo nc %h 22

Идея в том, что ваш SSH делает знать, как добраться до "foo", поэтому SSH там будет успешным. И оттуда вы можете "nc" перейти в baz. А если во внутренней частной сети есть другие хосты наряду с «baz», вы можете просто добавить их в строку «host baz».

Это в основном рассматривает хост «foo» как шлюз к «baz», так же как «шлюз» является шлюзом к «foo».

Очистить?

Что касается ответа готи: вместо использования netcat ("ssh ... nc %h 22"), начиная с OpenSSH 5.4, вы можете сделать это напрямую с помощью: "ssh -W %h:22 ...". Таким образом, вам не нужно беспокоиться о том, установлен ли netcat в нужном месте.

Используя закрытые ключи, хранящиеся на вашем локальном компьютере, введите эту команду, указав пути к закрытым ключам, имена пользователей оболочки и имена хостов / IP-адреса, измененные в соответствии с вашими потребностями ssh local-> gateway-> destination.

Обратите внимание, что ProxyCommand предпочтительнее пересылки агента, чтобы снизить риск компрометации аутентификации с закрытым ключом (с использованием шлюза и локального соединения ssh-агента для компрометации дополнительных хостов, как если бы у угонщика был закрытый ключ), когда шлюз / jumperbox был захвачен root-доступом.

Одна команда для прокси-соединения SSH с сервером (храните оба закрытых ключа на локальном компьютере):

sudo ssh -i dest_private_key.pem -o "ProxyCommand ssh -W %h:%p -i gate_private_key.pem gate_user@gate_IP" dest_user@dest_IP 

Это то, что я делаю, чтобы выйти из защищенной сети в Интернет.

Я использую свой ноутбук для работы с кодом в строить. поскольку строить ограничен доступ в Интернет, чтобы клонировать репо с github.com, мне сначала нужно перейти в ящик для инструментов, у которого тоже нет доступа в Интернет. Но он может получить доступ gw, у которого есть Интернет.

Как это:

Мой .ssh/config на строить:

Host gw
  ProxyCommand ssh -A -W %h:%p toolbox

Host github.com
  ProxyCommand ssh -A -W %h:%p gw

Объяснение.

  1. Точка зрения от строить. На других серверах конфигураций нет.
  2. Во-первых, я заявляю, что чтобы добраться до gw вам нужно сделать это через ящик для инструментов.
  3. Во-вторых, заявляю, что чтобы добраться до github.com, вам нужно сделать это через gw. Внутренне SSH использует предыдущее правило.
  4. В конечном итоге git clone git@github.com:aRepo/There просто работает!

Очистить?