Поиск по сайту:

Что такое обратное туннелирование SSH? (и как его использовать)


Нужно подключиться по SSH к недоступному компьютеру с Linux? Попросите его позвонить вам, а затем закопайте это соединение, чтобы получить свой собственный удаленный сеанс SSH. Мы покажем вам, как это сделать.

Когда вы захотите использовать обратное туннелирование SSH

Иногда удаленные компьютеры могут быть труднодоступны. Сайт, на котором они расположены, может иметь жесткие правила брандмауэра или, возможно, локальный администратор установил сложные правила преобразования сетевых адресов. Как вы доберетесь до такого компьютера, если вам нужно подключиться к нему?

Давайте установим некоторые метки. Ваш компьютер является локальным компьютером, потому что он находится рядом с вами. Компьютер, к которому вы собираетесь подключиться, является удаленным компьютером, поскольку он находится в другом месте, чем вы.

Чтобы различать локальные и удаленные компьютеры, используемые в этой статье, удаленный компьютер называется «howtogeek» и работает под управлением Ubuntu Linux (с фиолетовыми окнами терминала). Локальный компьютер называется «Sulaco» и работает под управлением Manjaro Linux (с желтыми окнами терминала).

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

Но если сетевая конфигурация на вашей стороне проста, удаленный компьютер может подключиться к вам. Однако одного этого недостаточно для ваших нужд, потому что он не предоставляет вам рабочий сеанс командной строки на удаленном компьютере. Но это начало. У вас есть установленное соединение между двумя компьютерами.

Ответ заключается в обратном туннелировании SSH.

Что такое обратное туннелирование SSH?

Обратное туннелирование SSH позволяет вам использовать это установленное соединение для установки нового соединения с вашего локального компьютера на удаленный компьютер.

Поскольку исходное соединение было установлено от удаленного компьютера к вам, использование его для перехода в другом направлении означает использование его «в обратном направлении». А поскольку SSH является безопасным, вы создаете безопасное соединение внутри существующего безопасного соединения. Это означает, что ваше подключение к удаленному компьютеру действует как частный туннель внутри исходного подключения.

Так мы приходим к названию «обратное туннелирование SSH».

Как это работает?

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

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

Настроить проще, чем описать.

Использование обратного туннелирования SSH

SSH уже будет установлен на вашем компьютере с Linux, но вам может потребоваться запустить демон SSH (sshd), если локальный компьютер никогда раньше не принимал подключения SSH.

sudo systemctl start sshd

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

sudo systemctl enable sshd

На удаленном компьютере мы используем следующую команду.

  • Параметр -R (обратный) сообщает ssh, что новые сеансы SSH должны создаваться на удаленном компьютере.
  • «43022:localhost:22» указывает ssh, что запросы на подключение к порту 43022 на локальном компьютере должны перенаправляться на порт 22 на удаленном компьютере. Порт 43022 был выбран потому, что он указан как нераспределенный. Это не особый номер.
  • dave@sulaco.local — это учетная запись пользователя, к которой удаленный компьютер будет подключаться на локальном компьютере.

ssh -R 43022:localhost:22 dave@sulaco.local

Вы можете получить предупреждение о том, что никогда раньше не подключались к локальному компьютеру. Или вы можете увидеть предупреждение, так как сведения о подключении добавляются в список распознанных хостов SSH. То, что вы видите, зависит от того, были ли когда-либо установлены соединения между удаленным компьютером и локальным компьютером.

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

Обратите внимание, что после установления соединения командная строка меняется с dave@howtogeek на dave@sulaco.

Теперь мы подключены к локальному компьютеру с удаленного компьютера. Это означает, что мы можем отдавать ему команды. Давайте воспользуемся командой who, чтобы увидеть логины на локальном компьютере.

who

Мы видим, что человек с учетной записью пользователя по имени dave вошел в систему на локальном компьютере, а удаленный компьютер подключился (используя те же учетные данные пользователя) с IP-адреса 192.168.4.25.

Подключение к удаленному компьютеру

Так как подключение с удаленного компьютера прошло успешно, и он прослушивает подключения, мы можем попытаться подключиться к удаленному компьютеру с локального.

Удаленный компьютер прослушивает порт 43022 на локальном компьютере. Поэтому — несколько нелогично — чтобы установить соединение с удаленным компьютером, мы просим ssh установить соединение с локальным компьютером через порт 43022. Этот запрос на соединение будет перенаправлен на удаленный компьютер.

ssh localhost -p 43022

Нас просят ввести пароль учетной записи пользователя, после чего мы подключаемся к удаленному компьютеру с локального компьютера. Наш компьютер Manjaro радостно говорит: «Добро пожаловать в Ubuntu 18.04.2 LTS».

Обратите внимание, что командная строка изменилась с dave@sulaco на dave@howtogeek. Мы достигли нашей цели, установив SSH-соединение с нашим труднодоступным удаленным компьютером.

Использование SSH с ключами

Чтобы было удобнее подключаться с удаленного компьютера к локальному компьютеру, мы можем настроить SSH-ключи.

На удаленном компьютере введите следующую команду:

ssh-keygen

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

Три или четыре слова, разделенные символами, составят надежный пароль.

Ваши ключи SSH будут сгенерированы.

Нам нужно передать открытый ключ на локальный компьютер. Используйте эту команду:

ssh-copy-id dave@sulaco.local

Вам будет предложено ввести пароль для учетной записи пользователя, в которую вы входите, в данном случае dave@sulaco.local.

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

Не все туннели страшны

Некоторые туннели могут быть темными и извилистыми, но обратное туннелирование SSH не слишком сложно для навигации, если вы можете сохранить связь между удаленным компьютером и локальным компьютером прямо в своей голове. Затем переверните его. Чтобы упростить задачу, вы всегда можете настроить файл конфигурации SSH, который позволит упростить такие вещи, как туннелирование или переадресация агента ssh.