Що таке зворотне тунелювання SSH? (і як ним користуватися)

Потрібен SSH до недоступного комп’ютера Linux? Попросіть його зателефонувати вам, а потім зарийте це з’єднання, щоб отримати власний віддалений сеанс SSH. Ми покажемо вам, як.

Коли ви захочете використовувати зворотне тунелювання SSH

Іноді віддалені комп’ютери можуть бути важкодоступними. Сайт, на якому вони знаходяться, може мати жорсткі правила брандмауера, або, можливо, локальний адміністратор налаштував комплекс Трансляція мережевих адрес правила. Як дістатися до такого комп’ютера, якщо до нього потрібно підключитися?

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

Щоб розрізняти локальні та віддалені комп’ютери, використані в цій статті, віддалений комп’ютер називається «wdzwdz» і працює під керуванням Ubuntu Linux (з фіолетовими вікнами терміналів). Локальний комп’ютер називається «Sulaco» і працює під керуванням Manjaro Linux (з жовтими вікнами терміналу).

Зазвичай ви запустили б SSH-з’єднання з локального комп’ютера та під’єднатися до віддаленого комп’ютера. Це не варіант у сценарії мережі, який ми описуємо. Насправді не має значення, яка конкретна проблема мережі — це корисно, коли ви не можете SSH прямо на віддалений комп’ютер.

Але якщо конфігурація мережі на вашому кінці проста, віддалений комп’ютер може підключитися до вас. Однак одного цього недостатньо для ваших потреб, оскільки воно не надає вам робочого сеансу командного рядка на віддаленому комп’ютері. Але це початок. У вас встановлено з’єднання між двома комп’ютерами.

  Як вимкнути iPhone X

Відповідь криється у зворотному тунелі 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 був обраний, тому що він є зазначено як нерозподілене. Це не особливий номер.
[email protected] це обліковий запис користувача, до якого віддалений комп’ютер збирається під’єднатися на локальному комп’ютері.

ssh -R 43022:localhost:22 [email protected]

Ви можете отримати попередження про те, що ви ніколи раніше не підключалися до локального комп’ютера. Або ви можете побачити попередження, коли деталі підключення додаються до списку розпізнаних хостів SSH. Те, що ви бачите (якщо що-небудь), залежить від того, чи було коли-небудь з’єднання віддаленого комп’ютера з локальним.

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

Зауважте, що після встановлення з’єднання командний рядок змінюється [email protected] до [email protected]

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

who

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

Підключення до віддаленого комп’ютера

Оскільки з’єднання з віддаленого комп’ютера успішне, і він прослуховує з’єднання, ми можемо спробувати під’єднатися до віддаленого комп’ютера з локального.

Віддалений комп’ютер прослуховує порт 43022 на локальному комп’ютері. Тож — дещо суперечливо — щоб встановити з’єднання з віддаленим комп’ютером, ми просимо ssh встановити з’єднання з локальним комп’ютером через порт 43022. Цей запит на з’єднання буде переслано на віддалений комп’ютер.

ssh localhost -p 43022

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

  Як захистити себе від атак заміни SIM-карт

Зауважте, що командний рядок змінився з [email protected] до [email protected] Ми досягли своєї мети — встановити SSH-з’єднання з нашим важкодоступним віддаленим комп’ютером.

Використання SSH з ключами

Щоб було зручніше підключатися з віддаленого комп’ютера до локального, ми можемо налаштувати ключі SSH.

На віддаленому комп’ютері введіть цю команду:

ssh-keygen

Вам буде запропоновано ввести парольну фразу. Ви можете натиснути Enter, щоб ігнорувати запитання про парольну фразу, але це не рекомендується. Це означало б, що будь-хто на віддаленому комп’ютері може встановити SSH-з’єднання з вашим локальним комп’ютером без запиту пароля.

Три-чотири слова, розділені символами, створять надійну парольну фразу.

Ваші ключі SSH будуть згенеровані.

Нам потрібно передати відкритий ключ на локальний комп’ютер. Використовуйте цю команду:

ssh-copy-id [email protected]

Вам буде запропоновано ввести пароль для облікового запису користувача, в який ви входите, у цьому випадку, [email protected]

Коли ви вперше робите запит на підключення від віддаленого комп’ютера до локального комп’ютера, вам потрібно буде вказати парольну фразу. Вам не потрібно буде вводити його знову для майбутніх запитів на підключення, доки це вікно терміналу залишається відкритим.

Не всі тунелі страшні

Деякі тунелі можуть бути темними і звивистими, але зворотне тунелювання SSH не є надто складним для навігації, якщо ви можете зберегти зв’язок між віддаленим і локальним комп’ютером прямо в голові. Потім переверніть його.