У меня дома есть запись в ~ / .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-доступом.
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
Объяснение.
git clone git@github.com:aRepo/There
просто работает!Очистить?