Я люблю пояснювати подібну річ через візуалізацію. :-)
Подумайте про свої SSH-з'єднання як пробірки. Великі трубочки. Зазвичай через ці трубки ви досягнете оболонки на віддаленому комп'ютері. Оболонка працює у віртуальному терміналі (tty). Але ви вже знаєте цю частину.
Подумайте про свій тунель як про трубу всередині трубки. У вас ще є великий SSH-з'єднання, але опція -L або -R дозволяє встановити всередині нього меншу трубку.
Кожна трубка має початок і кінець. Велика трубка, ваше з'єднання SSH, розпочалося з вашого клієнта SSH і закінчилося на сервері SSH, до якого ви підключились. Усі менші трубки мають однакові кінцеві точки, за винятком того, що роль "початку" або "кінця" визначається тим, чи використовували ви їх ( -L
або -R
відповідно) для їх створення.
(Ви ще не говорили, але я припускаю, що «віддалений» апарат, про який ви згадали, той, що знаходиться за брандмауером, може отримати доступ до Інтернету за допомогою трансляції мережевих адрес (NAT). Це дуже важливо, тому будь ласка, виправте це припущення, якщо воно помилкове.)
Коли ви створюєте тунель, ви вказуєте адресу та порт, на який він буде відповідати, та адресу та порт, на який він буде доставлений. -L
Опція вказує тунель , щоб відповісти на локальній стороні тунелю (господар працює ваш клієнт). -R
Опція вказує тунель , щоб відповісти на віддаленій стороні (сервер SSH).
Отже ... Щоб мати змогу передавати SSH з Інтернету в машину за брандмауером, вам потрібна машина, щоб відкрити SSH-з'єднання із зовнішнім світом та включити -R
тунель, точка "входу" якого є "віддаленою" стороною його зв’язок.
З двох моделей, показаних вище, ви хочете, щоб той був праворуч.
Від хазяїна, що захищається,:
ssh -f -N -T -R22222:localhost:22 yourpublichost.example.com
Це повідомляє вашому клієнту створити тунель з -R
точкою входу емоцій. Все, що приєднується до порту 22222 на дальньому кінці тунелю, насправді дістанеться до "localhost port 22", де "localhost" знаходиться з точки зору точки виходу тунелю (тобто вашого ssh-клієнта).
Інші варіанти:
-f
повідомляє ssh самому фону після його автентифікації, тому вам не доведеться сидіти, виконуючи щось на віддаленому сервері, щоб тунель залишився живим.
-N
говорить, що ви хочете з'єднання SSH, але насправді не хочете запускати віддалені команди. Якщо все, що ви створюєте, - це тунель, то включення цієї опції економить ресурси.
-T
вимикає розподіл псевдо-tty, що підходить, оскільки ви не намагаєтесь створити інтерактивну оболонку.
Виникне пароль, якщо ви не встановили клавіші DSA або RSA для входу без пароля.
Зауважте, що настійно рекомендується використовувати обліковий запис (не власний логін), який ви створили саме для цього тунелю / клієнта / сервера.
Тепер із оболонки на своємупублікості встановіть з'єднання з хостом, який пройшов через канал , через тунель:
ssh -p 22222 username@localhost
Ви отримаєте ключовий виклик хоста, оскільки ви, ймовірно, ніколи раніше не потрапляли на цей хост. Тоді ви отримаєте виклик пароля для username
облікового запису (якщо ви не встановили ключі для безкористувацького входу).
Якщо ви збираєтеся регулярно отримувати доступ до цього хоста, ви також можете спростити доступ, додавши до свого ~/.ssh/config
файлу кілька рядків :
host remotehostname
User remoteusername
Hostname localhost
Port 22222
Налаштовуйте remotehostname
і remoteusername
підлаштовуйте. remoteusername
Поле має відповідати своєму імені користувача на віддаленому сервері, але remotehostname
може бути будь-яким ім'ям хоста , який підходить вам, він не повинен відповідати нічого вирішити.
(Щоб виставити зворотну кінцеву точку в IP -адресі , що не є локальним , перегляньте цю публікацію )