SSH от клиента к встроенному Linux через сервер

SSH от клиента к встроенному Linux через сервер

Я хочу иметь возможность напрямую подключаться из любой точки мира к встроенному Linux (называемому C), у которого нет публичного IP-адреса.

C может установить соединение с сервером (с помощью SSH -R), и если я подключусь по SSH к серверу, то затем смогу подключиться по SSH к встроенному Linux.

Однако мне бы хотелось иметь возможность подключаться по SSH с клиента на C без необходимости предварительного подключения по SSH к серверу. (Я не могу настроить соединение с помощью SSH -R с C на клиент)

Возможно ли это, и если да, то как?

решение1

Вы можете сделать это довольно легко. Один из способов — использовать удаленную переадресацию портов SSH, с помощью которой C сообщает серверу, что нужно переадресовать порт обратно на него, что-то вроде:

ssh -R 2222:localhost:22 server

При запуске этой команды из C она сообщит серверу о необходимости перенаправлять все соединения с портом 2222 в C на порт 22.

Аналогичным образом вы можете настроить переадресацию портов на сервере с помощью правил брандмауэра.

решение2

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

  • Укажите публичный IP-адрес/имя хоста сервера в качестве первого аргумента -R, в противном случае он будет прослушивать только localhost, который, очевидно, недоступен извне сервера.
  • Настройте сервер с помощью GatewayPorts, что позволит сделать перенаправленные порты доступными извне.
  • Используйте -gпереключатель, чтобы в принципе разрешить то же самое со стороны клиента.
  • Откройте порт 2222в брандмауэре сервера.

Команда может выглядеть так:

ssh -g -R server:2222:localhost:22 server

Связанный контент