openssh: доступ до віддаленого комп'ютера

| ssh, комп'ютери, linux, підказки

продовжую ексеприментувати з різними інструментами для віддаленої роботи з комп'ютером. мета — отримати зручний і прозорий доступ до інтернету з українського ip через vpn з канади.

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

openssh: командний рядок на віддаленому комп'ютері

підключаюсь до комп'ютера в україні за допомогою того ж таки teamviewer'а — і вкотре радію, що перед від'їздом налаштував цей спосіб доступу: не елегантно, але працює. створюю собі там новий користувацький профіль (нехай test_ssh), щоби не логінитися через ssh в той, під яким там працюють люди.

далі відкриваю там термінал, встановлюю openssh:

sudo apt-get install openssh-server

для manjaro та інших похідних від arch інакше:

sudo pacman -S openssh

роблю резервну копію загальносистемного файлу налаштувань openssh:

sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.backup
sudo chmod a-w /etc/ssh/sshd_config.backup

редагую налаштування:

sudo nano /etc/ssh/sshd_config

…і бемц — перечіпляюся через один з глюків teamviewer'а: незалежно від налаштування «send key combinations», nano на тій стороні не отримує ctrl+o чи ctrl+x, тож неможливо ані зберегти файл, ані коректно закрити редактор. на щастя, маю там midnight commander, і mcedit нормально отримує комбінації ctrl+fx, тож:

sudo mcedit /etc/ssh/sshd_config

роблю деякі невеликі зміни в шаблонному файлі конфігурації openssh за хорошою онлайновою підказкою. по-перше, залишаю поки що стандартний порт ssh (22) та автентифікацію паролем — спершу треба переконатися, що ланцюжок плацює, а тоді вже експериментувати з портами і ключами безпеки:

Port 22
PasswordAuthentication yes

логін рутом? дивно, що таке дозволено в шаблоні! виправляю:

PermitRootlogin no

а щоби лише моєму користувачеві дозволено було підключатися по ssh, обмежую список користувачів:

AllowUsers test_ssh

(насправді мій профіль називається інакше — хто ж публікує таке в щоденнику?) щоби випробувати тунелювання X11 (програми з інтерфейсом XWindows можуть виконуватися на віддаленій машині, але інтерфейс показувати на моїй — це ж круто, ні?), залишаю/додаю таке:

X11Forwarding yes
X11DisplayOffset 10
X11UseLocalhost yes

для початку досить. запускаю сервіс ssh на віддаленій машині:

sudo restart ssh

(так це працює на debian та похідних; на arch'і треба скористатися systemctl). після цього в теорії сервіс ssh має працювати на віддаленій машині й слухати порт 22, а коли приходить запит від користувача test_ssh — запитати пароль і дати доступ до командного рядка:

ssh test_ssh@tivasyk_ukraine.duckdns.org

на ділі ж нічого не вийде, тому що…

рутер і файрволи

…між двома комп'ютерами є рутер (і це саме рутер, а не машина в його локальній мережі має отой динамічний ip, що на нього посилається tivasyk_ukraine.duckdns.org), а на самих комп'ютерах є файрволи. і це ще якщо власне канал в інтернеті «прозорий» і жоден з провайдерів між двома комп'ютерами не блокує ssh.

почав з файрволів. тут є два варіанти: поганий — вимкнути (хоча для тестування годиться), і правильний — налаштувати «вікно» у файрволі для ssh (порт 22, вхід/вихід, tcp); робиться елементарно за допомогою того чи іншого графічного інтерфейсу до iptables.

на рутері потрібно налаштувати форвардинг (переадресацію) для порту 22. коротко: рутер отримує запит на порт 22 і просто його ігнорує, тому що не підтримує ssh (звісно, якщо це не рутер з прошивкою ddwrt і налаштованим ssh!) — потрібно вказати йому переадресовувати всі запити на порт 22 до певної машини в локальній мережі.

рутер в україні — недорогий tp-link, але з веб-інтерфейсом і досить непоганим набором можливостей. через той-таки teamviewer відкриваю той веб-інтерфейс у вогнелисі. по-перше, резервую ip для моєї віддаленої машини в налаштуваннях dhcp рутера (в більшости випадків буде щось на кшалт 192.168.0.101 чи 192.168.1.101) — тепер комп'ютер матиме постійний ip без необхідності морочитися з налаштуванням статичного ip на обох пристроях. по-друге, налаштовую переадресацію порту на цей комп'ютер.

от тепер можна і спробувати (на локальній машині):

ssh test_ssh@tivasyk_ukraine.duckdns.org

настправді в мене це не одразу спрацювало, і я трохи «посмикав» файрволи на обох машинах та переадресацію порту на рутері… і хоч наче нічого не міняв, зненацька я отримав запрошення:

tivasyk_ssh@notebook:~$

зробив ls, щоби перевірити — таки працює!

результат: доступ до комп'ютера в україні по ssh

отже, тепер я можу відкривати термінал з командним рядком на віддаленому комп'ютері в україні. що далі?
  • навчитися копіювати файли собі з віддаленого пк (scp);
  • підключити свою домашню теку віддаленої машини як теку на локальній (sshfs);
  • спробувати, як працює форвардинг X11 (і оптимізувати швидкість);
  • налаштувати vnc, щоби позбутися teamviewer'а і відключити форвардинг X11;
  • розібратися з перевагами/недоліками форвардінгу tcp, vpn через ssh та openvpn;
  • почитати, які ще «фокуси» можна робити через ssh;
  • і при тім усім — не завалити іспит на водійську посвідку, він вже за три дні!
далі буде.