1

У меня есть опыт использования nginx для прокси сайтов с директивой proxy_pass . Есть ли что-то подобное, что я могу сделать с SSH?

Вот моя домашняя сеть с моими машинами и их именами хостов:

         <the Internet>
               |
            [router]
               |
 [kenmore]---[park]---[chiswick]

Как я могу настроить park так, чтобы всякий раз, когда он получает SSH-соединение, он проверял имя хоста и подключался к kenmore или chiswick соответственно? Я знаю, как сделать это для обслуживания HTTP, но не SSH.

4 ответа4

1

Если у вас есть root-права @ парк, вы можете использовать iptables - перенаправления:

  • ssh -p 2201 user@park → перейти в kenmore:22
  • ssh -p 2202 user@park → получить перенаправление на chiswick:22

iptables -t nat -A ПРЕДУПРЕЖДЕНИЕ - $ PARK_IP -p tcp --dport 2201 -j DNAT - к месту назначения kenmore:22
iptables -t nat -A ПРЕДУПРЕЖДЕНИЕ - $ PARK_IP -p tcp --dport 2202 -j DNAT - в пункт назначения:22
iptables -t nat -A POSTROUTING -j MASQUERADE

(Если у кого-то есть фрагмент iptables без NAT, мне будет интересно.)

1

Если у вас есть пользовательский доступ на kenmore, park и chiswick, самое простое решение - использовать ключи и команды SSH в ~/.ssh/авторизованные_коды.

Предположим для простоты, что у вас есть пользователь на всех трех машинах под названием ryan .

В парке создайте две пары ключей SSH:

$ ssh-keygen -C kenmore -f kenmore.rsa
$ ssh-keygen -C chiswick -f chiswick.rsa

В kenmore.rsa.pub добавьте префикс содержимого так, чтобы он читал :

command="ssh ryan@kenmore" ssh-rsa KEY_HERE

В chiswick.rsa.pub добавьте к содержимому префикс:

command="ssh ryan@chiswick" ssh-rsa KEY_HERE

Добавьте все содержимое как kenmore.rsa.pub, так и chiswick.rsa.pub в ~/.ssh/authorized_keys в отдельных строках.

Если вы сейчас войдете в систему для парковки с использованием любого из ключевых файлов (kenmore.rsa или chiswick.rsa), вы увидите запрос пароля - это должно быть приглашение SSH для kenmore или chiswick, в зависимости от того, какой ключевой файл вы использовали.

0

Если я правильно понимаю ваше требование, я считаю, что это просто невозможно.

Когда вы обслуживаете HTTP, клиент выполняет DNS-поиск хоста и отправляет HTTP-запрос этому хосту, который включает в себя заголовки исходного имени (с точки зрения клиента). Когда запрос попадает на сервер, сервер может принимать решения о том, как его обработать, основываясь на входящем IP-адресе и / или представлении клиента об имени хоста.

С другой стороны, с помощью SSH, после завершения поиска DNS используется только IP-адрес, а имя хоста, которое использовалось клиентом для разрешения этого IP-адреса, никогда не будет видно серверу.

Некоторые другие варианты, которые вы могли бы рассмотреть -

  • Имейте несколько демонов SSH, слушающих на различных портах, каждый перенаправляя к другому хосту. На клиенте вы можете установить ~/.ssh/config примерно так:

    Host kenmore
    Port 2201
    
    Host chiswick
    Port 2202
    

    (это предполагает, что они оба преобразуются в IP-адрес, который в первую очередь попадет в park .)

  • На вашем клиенте просто запустите второй SSH из park в качестве команды для вашего первого SSH, например

    ssh -t kenmore ssh kenmore
    

    (при условии, что kenmore решит park IP снаружи, но park знает реальный IP для kenmore для этого 2-го SSH, как только вы внутри)

  • Запуск что - то вроде GateOne на park и туннель это все по протоколу HTTP, с park действует на jumphost/шлюз к SSH терминалов , вам нужно на внутренней стороне .

0

Это необычная конфигурация, потому что она заменяет то, что может быть достигнуто с помощью 10-долларового переключателя. Но, конечно, если 10-долларовый коммутатор может сделать это, тем более компьютер может сделать это. Там должно быть несколько миллиардов способов сделать это, это просто.

Давайте предположим, что ваш маршрутизатор дает адреса в диапазоне 192.168.1.21-50, и давайте вызовем интерфейс eth0 park с маршрутизатором, eth1 для kenmore и eth2 для chiswick.

1) Позвольте парку получить свой IP-адрес через DHCP от маршрутизатора.

2) Давайте дадим статические IP-адреса kenmore и chiswick. Например, Kenmore 192.168.1.5 и Chiswick 192.168.1.10. Обратите внимание, что оба находятся за пределами диапазона, используемого вашим маршрутизатором, чтобы не было конфликтов.

3) В зависимости от ОС на kenmore/chiswick вам может потребоваться настроить таблицу маршрутизации на них. В Linux вы должны иметь

  sudo route add default gw 192.168.1.1

и аналогично на Mac, но на Windows я думаю, что это автоматически.

4) При парковке: во-первых, давайте разрешим пересылку IPv4: от имени sudo отредактируйте /etc/sysctl.conf и измените эту строку

 #net.ipv4.ip_forward=0

в

 net.ipv4.ip_forward=1

Сохраните файл, введите команду:

 sudo sysctl -p

5) Во-вторых, в парке, давайте добавим эти два маршрута в таблицу маршрутизации:

 sudo route add -host 192.168.1.5 dev eth1
 sudo route add -host 192.168.1.10 dev eth2

Теперь тебе пора.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .