Как назначить имя хоста для туннеля 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, как если бы он был сделан на удаленном сервере. Использовать имя теперь не нужно, поскольку браузер предназначен только для удаленных серверных сайтов.

brains_at_work
источник

Ответы:

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-туннель.

Zoredache
источник
Я должен был добавить 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