Как назначить имя хоста для туннеля SSH


16

Я использую, ssh root@my.server.ip -g -L 4321:localhost:28017 чтобы установить туннель от моего MacBook до моего выделенного сервера у моего хостинг-провайдера. Это работает хорошо. Теперь я хочу получить доступ к нескольким административным сайтам на удаленном сервере (страница состояния MongoDB, страница RabbitMQ и т. Д., Все на разных портах). Все они связаны с 127.0.0.1 на удаленной машине. Как я могу настроить эту команду SSH для

  • назначьте имя для туннеля и используйте, например, «my.tunnel.name» в моем браузере
  • иметь возможность определить удаленный порт в моем браузере; Я хотел бы подключиться к my.tunnel.name:port, чтобы иметь возможность звонить на разные сайты

Это возможно с помощью SSH? Я читал страницы руководства и гуглил в течение двух дней, но, похоже, это не работает.

--edit 2012-06-01 23: 36-- Благодаря предоставленным ответам и комментариям переадресация портов теперь работает с использованием

ssh user@remote.server -D 4321

Я могу настроить это как прокси в моем браузере, и браузер будет обрабатывать любой запрос к localhost: anyport, как если бы он был сделан на удаленном сервере. Использовать имя теперь не нужно, поскольку браузер предназначен только для удаленных серверных сайтов.

Ответы:


12

То, что вы описываете, невозможно. Но есть и хорошие новости:

Однако возможно установить динамическое соединение с сервером SSH. Это откроет порт на вашем локальном компьютере, на который вы можете указать настройки прокси вашего браузера и позволить вам использовать туннель в качестве прокси-сервера. Но вы должны ввести имя хоста / ip и порт в браузере, как если бы браузер работал на компьютере, на котором работает SSH-сервер.

Команда выглядит следующим образом: ssh user@server.example.com -D 1234
Затем укажите прокси вашего браузера на localhost:1234.

Поэтому, если вы туннелируете на сервер A и хотите подключиться к серверу B, вы вводите в свой браузер любой адрес, который вы вводите в браузер, работающий на сервере A. Если браузер, работающий на сервере A, не может подключиться к серверу B (если процесс на сервере B прослушивает только 127.0.0.1), но вы все равно не можете подключиться. Похоже, у вас есть только один сервер, но я хотел убедиться, что это понятно.

Если у вас есть только один сервер, вы подключаетесь к нему через динамическое соединение, устанавливаете свой прокси. После этого вы сможете ввести «localhost: 1234» (например) в браузер, и он подключится к службе, работающей на удаленном сервере, через порт 1234.

Примечание Securit: Никогда не устанавливайте сервер, на котором root может подключаться по SSH! Серьезный недостаток безопасности. Создайте учетную запись обычного пользователя (которому разрешено su или sudo) и SSH в качестве этого пользователя.


2
Вы используете -L 1234 (локальный порт вперед), когда вы должны использовать -D 1234 (динамический порт вперед). И, возможно, также избегайте использования -g, -g означает, что удаленные хосты могут подключаться к вашей переадресации, а это не то, что вам нужно, если вы делаете это с рабочей станции.
Маттиас Анберг

Спасибо, Крис. Я уже попробовал это. Я не могу использовать команду ssh только с указанным портом. Возвращает ошибку: «Неверная спецификация локальной пересылки« 1234 »»
brains_at_work

@ Matthias-Анберг: Отлично, это сделал свое дело. с динамической переадресацией теперь я могу использовать порт в качестве прокси и localhost: вызовы someport направляются на удаленный сервер.
brains_at_work

@ MattiasAhnberg Ого, что за ум. Спасибо за исправление.
Крис С

Я следовал этому процессу, но получил ошибку «Сброс соединения» в Firefox.
Риву

23

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

Таким образом, вместо привязки к порту 4321 вы можете привязать к 127.1.2.3:4321. Затем просто настройте запись хоста, которая отображает имя на адрес обратной петли, который вы использовали, так что foo.bar отображается на 127.1.2.3.

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

Так что, если вы подключитесь так

ssh root@my.server.ip -g -L 127.1.2.3:4321:localhost:28017

И в вашем файле hosts есть такая строка.

127.1.2.3 my.tunnel.name

Тогда вы сможете подключиться к my.tunnel.name:4321 с вашего локального компьютера.

Если у вас есть дополнительное пространство IP-адресов в сети, к которому подключен ваш ssh-клиент, вы можете даже назначить дополнительный адрес для интерфейса Ethernet и использовать один из ваших реальных IP-адресов, а затем настроить записи в DNS, если вы хотите, чтобы другие системы могли использовать ваш SSH туннель.

Опция -L -L [bind_address:]port:host:hostportпозволит вам использовать любой действительный IP-адрес в локальной системе для привязки. Вам также необходимо включить эту -gопцию, если вы хотите, чтобы другие хосты могли подключаться через ваш ssh-туннель.


Я должен был добавить IP к моему loopback в OSX. ifconfig l0 alias 127.0.1.1 255.255.255.0в противном случае отличный совет!
Девианы

1
Если вы не хотите, чтобы была создана оболочка, запустите -Nв конце команды. Таким образом, легче запомнить, что это туннель, а не просто какое-либо соединение SSH.
mlissner

При использовании 127.1.2.3я должен был сделать это на моем MacBook:, ifconfig lo0 alias 127.1.2.3 255.255.255.0который добавляет 127.1.2.3в качестве нового адреса на интерфейсе lo0.
Донн Ли

5

Создайте динамическую переадресацию портов на уровне приложений (в основном, через socks proxy) с вашим SSH-туннелем, а затем направьте свои приложения через него. Чтобы создать динамический туннель, подключитесь следующим образом:

ssh user@host.domain.com -D 127.0.0.1:31337

Затем настройте приложение для использования в качестве прокси-сервера SOCKSv5.

Если вы хотите, чтобы имя хоста было привязано к этому, просто добавьте /etc/hostsзаписи, которые указывают на 127.0.0.1, но более симпатичным способом может быть добавление 127.0.0.2 для первого туннеля и записи хостов для этого, 127.0.0.3 для второго туннель и отдельная запись хоста для этого и т. д. Если вы добавляете псевдонимы для 127.0.0.1, иногда этот псевдоним будет появляться в других командах при поиске localhost, что может сбивать с толку!

Чтобы плавно использовать это в веб-браузере, вы можете использовать прокси-аддон, в качестве примера я предпочитаю веб-браузер Chrome, а для этого я использую аддон под названием Proxy Switchy!. Вы можете скачать его здесь:
https://chrome.google.com/webstore/detail/caehdcpeofiiigpdhbabniblemipncjj

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


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