Назад | Перейти на главную страницу

ssh все машины за маршрутизатором

У меня в локальной сети несколько машин. Один используется в качестве http-прокси для нацеливания на веб-сайты, расположенные на других (теперь он отлично работает благодаря ServerFault). На моем маршрутизаторе порт 22 подключен к этой прокси-машине через NAT. Я хотел бы иметь доступ к другим машинам в Интернете, например:

ssh user@first_machine.my_domain.tld ssh user@second_machine.my_domain.tld

Могу ли я использовать прокси-машину для «фильтрации» входящих ssh-запросов и перенаправления их на правильный компьютер? (точно так же это можно сделать для веб-сайтов, используя сочетание mod_proxy и namevirtualhost в Apache)

Большое спасибо Люк

Вы можете настроить это в своем .ssh/config файл для автоматической настройки туннеля

http://backdrift.org/transparent-proxy-with-ssh

в основном вы просто добавляете что-то вроде

Host machinebehindrouter
ProxyCommand  ssh user@externalhost nc %h %p

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

Я настоятельно рекомендую вам подключить к Интернету как можно меньше машин через отображение портов! Особенно, если разрешена интерактивная аутентификация по паролю / клавиатуре. У людей действительно слабые пароли.

Еще одно предложение может заключаться в подключении к вашей прокси-машине и явной настройке туннелей для каждой машины, к которой вы хотите напрямую подключиться, за вашим NAT. Вы можете указать один (или несколько) туннелей SSH прямо из командной строки следующим образом:

ssh -L localport:hostnameOrIPofMachineBehindNAT:remoteMachinePort yourusername@proxy.example.com

куда localport Это номер порта, который вам нужно подключить на вашем локальном хосте, который будет перенаправлен на машину за NAT, SSH туннелируется через ваш прокси.

hostnameOrIPofMachineBehindNAT это LAN IP или LAN DNS машины без прокси, к которой вы хотите подключиться за NAT. Часто в частном диапазоне IP, таком как 10/8, 192.168 / 16 или 172.16 / 12.

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

Думаю, yourusername@proxy.example.com - это банально.

Затем вы можете подключиться к другому компьютеру из другой локальной оболочки следующим образом:

ssh usernameOnRemoteBoxBehindNat@localhost

Поскольку командная строка может легко стать очень длинной и утомительной для ввода, лучше заполнить все это желаемым количеством опций SSH и таким количеством туннелей портов, которые вам нравятся. ~/.ssh/.ssh_config файл. Это сократит ввод текста до ssh connectionNickname и всегда автоматически устанавливайте все переадресации и параметры.

Видеть man 5 ssh_config для подробного объяснения и списка параметров конфигурации, которые вы можете использовать в ~/.ssh/.ssh_config.

  • Вы можете сначала использовать ssh на одном компьютере, а затем - с этого компьютера на другие. Возможно, используйте ssh-ключи, чтобы упростить вход.
  • Или вы можете изменить порт на каждой машине и правильно настроить NAT.

Я бы выбрал первый вариант и защитил другие машины, чтобы разрешить ssh только с первой машины.

Другие люди внесли хорошие предложения, но я думаю, что самый простой и гибкий ответ уже содержался в вашем вопросе, когда вы давали пример команды. То есть, если у нас есть исходный хост, промежуточный хост и целевой хост; и с тех пор ssh может выполнять команды на удаленном хосте для нас, вы можете запустить эту команду с исходного хоста:

ssh -t $intermediate ssh $destination

Конечно, вы можете добавить другие параметры, если необходимо, либо ssh или напишите оболочку оболочки (сценарий, псевдоним, функцию) для обработки любых переменных. В -t flag заставляет выделить псевдотерминал, что я считаю необходимым, но вы можете протестировать соединение без него, чтобы убедиться в этом. Кроме того, если вы создаете пары открытого / закрытого ключей для каждого хоста в цепочке и используете ssh-agent, вы можете избежать ввода паролей.

Я бы посмотрел, просто подключился к вашему прокси-серверу или другому хосту, а затем использовал бы GNU screen утилита, чтобы иметь несколько сеансов, работающих с другими вашими устройствами.

В качестве бонуса вы узнаете, как использовать screen, это фантастическое приложение, о котором каждый должен знать больше!