Пересылка SSH через туннель SSH


30

Моя ситуация :

Я (localhost) -> Сервер A (ip: 100.100.100.100) => (сервер B (ip: 192.168.25.100), сервер ....)

Я могу подключиться к серверу SSH, так как у него есть настоящий ip, если я затем хочу подключиться к серверу b, я бы подключил ssh к серверу b с его ip (192.168.25.100)

пример:

с моего компьютера:

ssh user@100.100.100.100

затем в 100.100.100.100,

ssh user@192.168.25.100

это приведет меня к серверу B с помощью SSH

Что делать, если я хочу подключиться к серверу B напрямую? Как я могу это сделать?

пример:

из моего ок:

ssh@192.168.25.100

я пробовал следующее:

ssh -L 22:localhost:22 user@100.100.100.100

безуспешно

Ответы:


30

Ваша проблема в привязке слушателя к localhost: 22; там уже слушается sshd. Туннелирование ssh-соединения через ssh-соединение абсолютно законно, и я делаю это все время, но вам нужно выбрать неиспользуемые порты для пересылающих слушателей.

Пытаться

me% ssh user@100.100.100.100 -L 2201:192.168.25.100:22

тогда

me% ssh localhost -p 2201

Вы должны оказаться на сервере B (если что-то уже не связано со мной: 2201, в этом случае выберите другой порт).


Спасибо за быстрый ответ! это работает, однако, как я могу переслать все соединения, а не только SSH (22)?
— tom91136

1
Это полноценный VPN, который вы ищете, а не просто переадресация портов. Есть запись о том, как сделать vpn-over-ssh на bodhizazen.net/Tutorials/VPN-Over-SSH , но для этого требуется удаленный root-доступ через ssh на A. Или вы можете посмотреть на OpenVPN или другие решения VPN, но опять же, вам понадобится привилегия на А, чтобы заставить их работать.
— MadHatter поддерживает Монику

спасибо большое, еще одна вещь, что если я только хочу подключиться к A?
— Tom91136

me% ssh user@100.100.100.100; мы уже не покрывали это? или вы имеете в виду «что если я хочу полноценный VPN для A?», в этом случае мой ответ остается в силе.
— MadHatter поддерживает Монику

1
Для людей, которые хотят VPN через SSH, не имеют корневого доступа на сервере, но у него есть Python, попробуйте sshuttle .
— Андре Парамес

23

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

ssh -t user@100.100.100.100 ssh user@192.168.25.100

В -tопции силы SSH выделить псевдо-терминал , так что вы можете запустить интерактивную команду.

Это может работать и с ключами ssh. Если у вас есть личный и открытый ключ на компьютере A и ваш открытый ключ в файлах авторизованных ключей на компьютерах B и C, вы можете использовать -Aопцию для переадресации соединения с агентом аутентификации.


10

Я использовал другое решение. Я использовал ProxyCommandопцию (здесь, в ~/.ssh/config):

Host myinsidehost1 myinsidehost2 myinsidehost3
ProxyCommand ssh externalhost ssh %h sshd -i

Это не устанавливает туннель между портами, вместо этого туннелирует ssh с помощью стандартного stdin / out. Недостатком этого метода является то, что на самом деле есть три ssh-соединения для аутентификации. Но чтобы подключиться к внутреннему хосту, просто наберите:

ssh myinsidehost2

... так что вам не нужно заботиться о выборе любого IP для этого туннеля.


1
Это единственный вид SSH-стека, который я считаю работающим. Я пытался corkscrewили nc( netcat), но ни один не работает так легко, как это.
— Фуонг Нгуен,

7

согласно справочной странице ssh, ProxyCommand является правильным методом

синтаксис:

ProxyCommand ssh -W %h:%p user@jumphost 2> /dev/null

Я не уверен, что этот -Wвариант существовал, когда на этот вопрос был дан ответ. Но с более новыми версиями клиента ssh я согласен, что комбинация ProxyCommandи -Wявляется предпочтительным методом. Может быть, добавить некоторый контекст, показывающий, как его можно использовать в командной строке, а также пример раздела для .ssh/config.
— Касперд

Любая идея, где найти информацию о журналах изменений / версиях, которая говорит нам, какие версии SSH имеют -Wкоманду, а какие нет? Немного поиска в Google не
— давал

-Wпознакомился с OpenSSH 5.4, выпущенной в 2010 году. Поэтому ответ - да @kasperd
— 0xC0000022L

7

Начиная с OpenSSH 7.3 (конец 2016 года), самый простой способ - это настройка ProxyJump . В вашем ~/.ssh/config:

Host B
  ProxyJump A

Или в командной строке -J B.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.