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

SSH: локальный сервер имеет общедоступный IP-адрес; Remote не

Локальная машина имеет публичный IP.

Удаленный компьютер работает на клиентском сайте. У меня есть полный доступ к этой машине, но у нее нет публичного IP-адреса. В настоящий момент мы используем TeamViewer для удаленного доступа к этой машине, но мы предпочли бы использовать решение на основе x11vnc.

Есть ли какой-то демон или программное обеспечение, которое я могу запустить на удаленном компьютере, чтобы при загрузке я мог подключиться к нему по ssh (возможно, через туннель?).

(123.45.6.78)
  local             .-,(  ),-.    
   __  _         .-(          )-.                             Remote 
  [__]|=|  ---->(    internet    )-------> __________ ------> ____   __ 
  /::/|_|        '-(          ).-'        [_...__...°]       |    | |==|
                     '-.( ).-'                               |____| |  |
                                                             /::::/ |__|

Приведенное ниже решение будет работать следующим образом:

  Local             .-,(  ),-.    
   __  _         .-(          )-.           Gateway             RemoteX
  [__]|=|  ---->(    internet    )-------> __________ ------> ____   __ 
  /::/|_|        '-(          ).-'        [_...__...°]       |    | |==|
                     '-.( ).-'                               |____| |  |
                                                             /::::/ |__|

Вы можете сделать это через ssh ProxyCommand объект. Добавьте следующее в свой $HOME/.ssh/config файл. Создайте его, если он не существует, только с этим содержимым:

Host RemoteX
    User userint
    ProxyCommand ssh userext@Gateway nc RemoteX %p
Host RemoteY
    User userint
    ProxyCommand ssh userext@Gateway nc RemoteY %p

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

$ ssh RemoteX

-or-

$ ssh RemoteY

Это верхушка айсберга. Посмотрите эти вопросы и ответы U&L под названием: SSH-туннель через сервер-посредник - как подключиться за один шаг (используя пару ключей)?, Больше подробностей.

НОТА: Вышеупомянутый метод использует инструмент под названием nc (netcat), который должен быть в репозиториях любых основных дистрибутивов.

Сложный пример

  1. Один Host строфа, много хозяев.

    Host *.mydom.com *
        ProxyCommand ssh externalserver nc %h %p
    
  2. Одна строфа `Hosts для многих пользователей.

    Добавить Hosts строфа к системе /etc/ssh/ssh_config файл, чтобы любой, кто входит в систему, мог им воспользоваться.

Что делать, если IP шлюза изменится

Если у вас есть ситуация, когда системы на "удаленном" конце колеблются, вы можете использовать служба динамического DNS (DDNS) Такие как noip. Таких сервисов десятки, некоторые бесплатные, а некоторые платные.

Основная идея этих сервисов заключается в том, что они дают вам статическое имя, например me.noip.org и вы запускаете небольшой инструмент-демон на "удаленном" клиенте. В вашем случае это может быть система шлюза или даже одна из удаленных систем. Этот демон получит IP-адрес шлюза, который в настоящее время назначен в Интернете, и ретранслирует его в службу DDNS, которая затем внесет его в список как текущий IP-адрес для me.noip.org. По мере изменения он будет обновляться с течением времени.