Як я можу налаштувати так, щоб я завжди міг SSH для своєї системи через Інтернет через динамічний IP?


11

В основному я хочу мати змогу зробити щось на кшталт teamviewer, де незалежно від того, яка конфігурація мережі, якщо мої ssh-сервер (Machine A) і ssh-клієнт (Machine B) мають доступ до Інтернету (і якийсь третій сервер, Machine C ), Я можу отримати доступ - причиною цього є те, що я хочу мати можливість перемістити машину A, підключити її до живлення, мати автоматичне підключення до однієї з декількох заздалегідь налаштованих мереж wifi (кожна унікальна / інша) , не конфігурувавши переадресацію портів або подібне в мережах, і мати можливість увійти в нього через Інтернет з машини B

Як я можу це досягти? Я не проти налаштувати щось на сервері зі статичною IP-адресою, щоб допомогти в рукостисканні, але я також не проти сторонніх серверів, якщо щось вже існує (як це робиться, наприклад, для teamviewer)

редагувати для наочності: у мене є 3 машини, AB та C

A - це безголовий пиріг з малиною, який буде включатися / вимикатися у випадкових місцях, підключатися до попередньо конфігурованої мережі Wi-Fi

B - це машина з належним монітором, клавіатурою тощо, з якого я хочу підключитися

C - орендований сервер AWS, який у мене зі статичною IP-адресою, може надійно SSH входити з B і може встановлювати все необхідне, щоб допомогти B підключитися до A


Чи можете ви ssh до 3-ї машини?
Антон

@Anthon Я думаю, що так, я перейменував їх AB та C і додав описи для них, сподіваюся, що це очистить
user2813274

кашель no-ip.com кашель
Джошуа

1
no-ip.com не допоможе, якщо периметрова брандмауер у вашому місці не дозволяє повернути трафік!
bobstro

Раніше я використовував sshтунелі, дуже коротко. Я ніколи не міг змусити їх встати, хоча навіть з autossh; якщо висхідна лінія випала з будь-якої причини, їх завжди доведеться перезапустити вручну. Врешті-решт я встановив для себе невелику VPN за допомогою OpenVPN, і це виконало роботу чудово.
Blacklight Shining

Відповіді:


11

Якщо у вас є машина C в Інтернеті, зробіть там спеціальний обліковий запис sesame, а на A ви зробите обліковий запис з відкритим / приватним ключем, з якого скопіювали відкритий ключ у sesameрахунок на C.

Тепер ви можете увійти від A до C, але замість цього ви робите:

ssh -N -R 19930:localhost:22 sesame@yourserverC

(ви можете поєднати це з повідомленням про сон або, наприклад, 10 секунд і завернути це в нескінченний цикл, щоб з'єднання було відновлено, якщо зникнення Wi-Fi виникла)

З машини B, як правило, увійдіть у будь-який обліковий запис, який у вас є на C (може бути, але не повинен бути sesameобліковим записом; я використовую різні облікові записи). І як тільки ви перейдете на C, увійдіть в A за допомогою:

ssh localhost -p 19930

Звичайно, ви можете використовувати інше число, ніж 19930.

Можна запустити ssh -N -R ...з, /etc/rc.localякщо ваш приватний ключ на A не захищений паролем. У такому випадку переконайтеся sesame, що ви маєте окремий обліковий запис з обмеженою функціональністю, щоб, коли ваша машина A потрапляє в компрометацію / крадіжку, ризик для вашого сервера C обмежений. Тому я рекомендую використовувати окремий обліковий запис, щоб дістатися з B до C.

Ви можете фактично встановити оболонку входу в систему для sesameв /etc/passwdдо /bin/false, так що ви можете більше не використовувати обліковий запис для входу в систему .


Це рішення відрізняється від використання TeamViewer, там сервер використовується для відкриття портів, які потім переспрямовуються для прямого спілкування. Як і такі програми, як BitTorrent, безпосередньо спілкуються після пошуку машин для завантаження (без того, щоб заздалегідь відкривати порти).
Антон

Отже, головна відмінність полягає в тому, що таким чином ВСЕ трафік проходить через сервер C, проти C використовується тільки для встановлення зв'язку, а потім не використовується для решти з'єднання - я з цим все в порядку. У вас є хороший момент, що стосується безпеки, чи є щось, що я повинен зробити, зокрема, щоб кунжут не міг нічого робити на C, окрім простого мінімуму входу? (Система RHEL)
користувач2813274

1
@ user2813274 Дійсно, все трафік проходить через C у цьому сценарії (що вивело б корисність з BitTorrent). Я не впевнений, наскільки ви можете обмежити sesameрахунок на C, можливо, ви можете змусити його працювати /bin/falseяк оболонка для входу (оскільки ssh ніколи не входить у систему), або іншим чином обмежити його, додавши command=параметр в~/.ssh/authorized_keys
Anthon,

@ user2813274 Якщо ви ще не спробували себе: якщо у вас є спеціальний обліковий запис для налаштування зворотного проксі, ви можете відключити вхід до цього облікового запису, змінивши оболонку входу на /bin/false.
Антон

1
@ user2813274 Так, я спробував це, і це дозволить мені налаштувати зворотний тунель (вам потрібно інший обліковий запис, щоб потрапити на сервер C, щоб зробити ssh localhost -p portnumкурс)
Anthon,

7

Встановіть на ваш Raspberry Pi тунель IPv6 (наприклад, Sixxs ). Тепер у вас буде постійна статична IPv6-адреса, яка з’явиться в Інтернеті щоразу, коли ваш Pi буде в мережі. Переконайтесь, що ви захистили свій Pi, оскільки він зараз підключений до світу.

Якщо ваш B підключений до мережі IPv6, то підключіться безпосередньо до Pi. Якщо B не підключено до мережі IPv6, використовуйте C як стрибковий сервер, де ви підключаєтесь через IPv4 до C, а потім ssh над IPv6 з C на ваш Pi.


Мені це подобається, оскільки він навіть не вимагає C, якщо мережі підтримують IPV6, мені доведеться все ж спробувати це - будь-які проблеми, що стосуються брандмауерів, що блокують це за замовчуванням?
користувач2813274

1
Sixxs надають більше одного протоколу для тунелювання IPv6. Якщо ви використовуєте що-небудь у чомусь (AYIYA), вам знадобиться TCP-порт 3874 та порт UDP 5072, відкриті з Pi в Інтернет. У домашніх мережах це повинно бути добре; корпоративні та кампусові мережі можуть бути різними.
garethTheRed

Встановлення тунелю звучало доцільно, але, здається, мені доведеться підписатися на сервіс Sixxs, зачекати, коли вони повернуться до мене з IP-адресою тощо - вже не дуже просто - все ще потенційно хороше рішення, але я Не думаю, що його маршрут я зараз іду.
користувач2813274

1

Подивіться також на це:

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

Однак він не забезпечує автоматичне з'єднання від А до С, його потрібно запустити вручну. Можливо, ви можете трохи налаштувати рішення, щоб воно робило саме те, що ви хочете.


0

Можливо, вам потрібно використовувати іншу, ніж ssh або тунельну концепцію .. Я пропоную вам використовувати таку концепцію обміну повідомленнями, як WhatsApp або Telegram .. Але я думаю, якщо ви хочете використовувати щось на кшталт vim, це не так добре, як ssh ..

У Telegram є клієнт телеграма-клі, який ви можете модифікувати, щоб прийняти та виконати певну команду та реалізувати її в raspi ..

Якщо ви користуєтеся Telegram, ви можете спростити свою мережу і принаймні зменшити машину C, щоб зробити концентратор, оскільки сервер C замінений сервером обміну повідомленнями Telegram .. телеграма вже придумала клієнт iphone та android, тому я не думаю, що вам потрібен ваш Машина також, ви можете встановити клієнт телеграми для конкретної ОС, якщо хочете .. безпеку? телеграмове повідомлення зафіксовано .. Якщо хтось хоче додати ваші рапи? вони спочатку додадуть сервер телеграм.

Тому поки ваш Raspi може підключитися до сервера телеграми (просто ваш Raspi підключиться до Інтернету), навіть Raspi знаходиться за брандмауером / проксі / приватним IP / динамічним IP, ви завжди можете робити віддалений ..

За допомогою цієї концепції ви можете робити дистанційне в будь-якому місці та в будь-який час ..


Ват. Це небезпечно, ви довіряєте якійсь програмі для випадкових повідомлень, ви говорите, що ОП має змінити додаток для випадкових повідомлень, щоб воно працювало. Це навіть не усвідомлюючи, що додаток для випадкових повідомлень повністю розіб'ється з чимось на зразок vim та матиме жахливу затримку.
Ще один користувач

Ну, якщо ви використовуєте його просто для надсилання команди, я думаю, що це нормально .. якщо ви використовуєте його для чогось типу vim, я не думаю, що це добре .. хороша порада .. я відредагую свою відповідь
Wicaksono Trihatmaja

Я не думаю, що це те, що я хочу, я хочу отримати повний доступ до оболонки, а не насправді нічого менше, ніж щодо дозування Pi .. Я не дуже переймаюся, перш за все тому, що мені потрібно зробити спеціальну установку для навіть підключитися до нього сам, по-друге, тому що його з'єднання будуть переривчастими і в будь-якому випадку змінюються випадковим чином
user2813274

0

Я думаю, вам слід поглянути на зворотну переадресацію порту ssh. У двох словах, ви спершу ініціюєте ssh від A до C за допомогою синтаксису нижче, а потім використовуєте цей порт, щоб тунель повернувся з C до A. Ви не будете потрапляти на домашній брандмауер A, коли це зробите, оскільки R-Pi вже має тунель.

ssh -R 2210: localhost: 22 myCoolAwsSite.com

Будь ласка, врахуйте наслідки безпеки, коли ви це зробите. Ви можете додати трохи cron jujitsu, щоб з'єднання було відновлено після перезавантаження.


Помилка ... чим це відрізняється від відповіді Ентона?
користувач2813274
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.