Пересылка 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

безуспешно

tom91136
источник

Ответы:

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, в этом случае выберите другой порт).

MadHatter поддерживает Монику
источник
Спасибо за быстрый ответ! это работает, однако, как я могу переслать все соединения, а не только 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 для этого туннеля.

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

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

синтаксис:

ProxyCommand ssh -W %h:%p user@jumphost 2> /dev/null
Packeteer
источник
Я не уверен, что этот -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.

arantius
источник