Малки трикове за SSH

В тази статия са събрани най-добрите ни практики за по-ефективна работа с SSH. От нея ще научите как:

  • Добавяне на втори фактор за влизане в SSH
  • Безопасно използване на agent forwarding
  • Изход от заседнала SSH сесия
  • Запазване на постоянен отворен терминал
  • Споделяне на отдалечена терминална сесия с приятел (без Zoom!)

Добавяне на втори фактор към вашето SSH

Втори фактор за удостоверяване на вашите SSH връзки може да бъде добавен по пет различни начина:

  1. Актуализирайте своя OpenSSH и използвайте криптографски ключ. През февруари 2020 г. в OpenSSH беше добавена поддръжка за криптографски ключове FIDO U2F (Universal Second Factor). Това е отлична нова функция, но има нюанс: само клиенти и сървъри, които са актуализирани до версия OpenSSH 8.2 и по-висока, ще могат да използват криптографските ключове, тъй като февруарската актуализация въвежда нови типове ключове. С командата ssh -V можете да проверите клиентската версия на SSH, а версията на сървъра — с командата nc [servername] 22

    В февруарската версия бяха добавени два нови типа ключове — ecdsa-sk и ed25519-sk (вместо със съответните сертификати). За генериране на файл за ключ просто поставете своя криптографски ключ и стартирайте командата:
    $ ssh-keygen -t ecdsa-sk -f ~/.ssh/id_ecdsa_sk

    Това ще създаде публични и частни ключове и ще ги свърже с вашето U2F устройство. Задачата на частния ключ на U2F устройството е да дешифрира секретния дескриптор на ключа на диска при активиран криптографски ключ.

    Освен това, като вторичен фактор, можете да предоставите кодова фраза за вашите ключове.

    Ключ-резидент е още един поддържан от OpenSSH тип за генериране на -sk ключове. При този подход дескрипторът се съхранява на U2F устройството и ви позволява да го имате с криптографския ключ, когато е необходимо. Създаването на ключ-резидент може да се извърши с командата:

    $ ssh-keygen -t ecdsa-sk -O resident -f ~/.ssh/id_ecdsa_sk

    След това, за да върнете дескриптора обратно в паметта на новото устройство, поставете криптографския ключ и стартирайте командата:

    $ ssh-add -K

    При свързване с хост все още ще трябва да активирате криптографския ключ.

  2. Използвайте PIV+PKCS11 и Yubikey. За свързване с устройства с по-стари версии на SSHD с помощта на криптографски ключ е необходим различен подход. В Yubico има указания за използване на U2F+SSH с PIV/PKCS11 (на английски). Това не е същото като FIDO U2F и, макар методът да работи, изисква сериозни усилия да разберете каква магия го движи.
  3. Прилагане на персонализиран yubikey-agent ssh агент. Филипо Валсурда е написал SSH агент за Yubikeys. Той е напълно нов и съдържа минимални функции.
  4. Използване на Touch ID и sekey. Sekey е SSH агент с отворен код, който съхранява секретни ключове в защитен анклав на Mac и позволява използването на Touch ID за достъп.
  5. Използване на Single Sign On SSH. Написах ръководство, за да помогна с конфигурацията на този метод (на английски). Едно от предимствата на single sign on SSH е възможността да се активират политиките за сигурност на вашия удостоверител — включително поддръжка на многофакторна автентикация (MFA).

Сигурно използване на agent forwarding.

В SSH agent forwarding позволява на отдалечения хост да получи достъп до SSH агента на вашето локално устройство. Когато използвате SSH с активиран agent forwarding (обикновено чрез ssh -A), връзката ще има два канала: вашата интерактивна сесия и канал за agent forwarding. Чрез този канал Unix сокета, създаден от вашия локален SSH агент, се свързва с отдалечения хост. Това е рисков метод, тъй като потребител с root достъп на отдалеченото устройство може да получи достъп до вашия локален SSH агент и потенциално да се представя за вас в мрежата. Като ползвате стандартния SSH агент от комплекта Open SSH, дори не ще разберете, че това се е случило. Наличието на U2F ключ (или Sekey) ще ви помогне да блокирате ефективно всякакви опити да бъде използван вашия SSH агент отвън.

Дори с тази предпазна мярка ще бъде добра идея да използвате agent forwarding колкото се може по-рядко. Не трябва да го използвате при всяка сесия — ползвайте agent forwarding само когато сте сигурни в необходимостта му за текущата сесия.

Изход от зациклила сесия.

Прекъсване на мрежата, неконтролируемо поведение на програми или управляваща последователност, която блокира въвеждането с клавиатурата — всичко това са възможни причини за прекъсване на SSH сесията.

Можете да приключите зациклила сесия по няколко начина:

  1. Автоматично излизане при прекъсване на мрежата. Във вашия .ssh/config трябва да добавите следното:
    ServerAliveInterval 5
    ServerAliveCountMax 1

    ssh ще изпраща echo до отдалечения хост на всеки ServerAliveInterval секунди, за да провери връзката. Ако не получи отговор на повече от ServerAliveCountMax echo, ssh ще приключи връзката по време на тайм-аут и ще излезе от сесията.

  2. Излез от сесията. ssh по подразбиране използва символа ~ (тилда) като управляващ. Командата ~. затваря отворената връзка и ви връща обратно в терминала. (Контролни последователности могат да се въвеждат само с нов ред.) Командата ~? ще изведе пълен списък на наличните команди в тази сесия. Имайте предвид, че за да въведете символа ~ на международните клавиатури, може да се наложи да натиснете клавиша ~ два пъти.

Защо изобщо се случват зависнали сесии? В епохата на създаване на интернет компютрите рядко се местеха. Когато използвате лаптопи и превключвате между няколко IPv4 мрежи WiFi, вашият IP адрес се променя. Тъй като SSH разчита на TCP връзки, а те от своя страна разчитат на крайна точка със стабилен IP адрес, всеки път, когато превключвате между мрежите, вашите SSH връзки губят дескриптора на сокета и фактически се загубват. Когато се промени вашият IP адрес, на вашия мрежови стек му е необходимо време да засече загубата на дескриптора. Когато възникнат мрежови проблеми, не искаме един от възлите в TCP връзката да я прекъсне твърде рано. Затова протоколът ще опита да повтори данните още няколко пъти, преди най-накрая да се предаде. През това време, в терминала ви, сесията ще изглежда замряла. IPv6 добавя няколко свързани с мобилността функции, които позволяват на устройството да запази домашния адрес по време на смяна на мрежата. Може би, един ден, това няма да е толкова голям проблем.

Как да запазите постоянен терминал отворен на отдалечен възел

Има два различни подхода за запазване на връзката при преминаване между различни мрежи или желание да се изключите за кратко.

1. Използвайте Mosh или Eternal Terminal

Ако наистина имате нужда от свързване, което не се прекъсва, дори когато превключвате между мрежи, използвайте мобилната обвивка Mosh. Това е защитена обвивка, която първо използва SSH ръкостискане, а след това преминава към собствен канал, който е криптиран по време на цялата сесия. Така Mosh създава отделен, много устойчив и защитен канал, който може да издържи на прекъсвания на интернет връзката, смяна на IP адреса на лаптопа ви, сериозни мрежови разкъсвания и много други, всичко това благодарение на магията на UDP връзките и прилагания от Mosh синхронизиращ протокол.

За да използвате Mosh, ще трябва да го инсталирате и на клиента, и на сървъра, и да отворите портовете 60000-61000 за несвързан UDP трафик към отдалечения хост. След това за свързване е достатъчно да използвате mosh user@server.

Mosh оперира на ниво екрани и натискания на клавиши, което му дава редица предимства пред стандартния поток на входни и изходни данни между клиента и SSH сървъра. Ако ни е необходимо само да синхронизираме екраните и натисканията на клавиши, то по-късно възстановяването на прекъснатото свързване става много по-лесно. Докато SSH ще буферира и изпраща всичко, което е станало, Mosh е достатъчно да буферира натисканията на клавиши и да синхронизира последния кадър на терминалния прозорец с клиента.

2. Използвайте tmux

Ако искате да "идвате и си отивате, когато ви се зах ønsker" и да задържате сесия на терминала на отдалечен хост, използвайте терминален мултиплексор tmux. Обичам tmux и го използвам постоянно. Ако вашето SSH свързване е прекъснато, просто се повторно свържете и напишете tmux attach. Освен това, той предлага чудесни функции като вътрешни терминални раздели и панели, подобни на разделите в терминала на iOS, и възможността да споделяте терминали с други.

Някои обичат да обогатят своя tmux с Byobu, пакет, който значително подобрява удобството на използване на tmux и добавя много комбинации от клавиши. Byobu идва с Ubuntu и е лесен за инсталиране на Mac чрез Homebrew.

Споделяне на отдалечена терминална сесия с приятел

Понякога, когато отстранявате сложни проблеми на вашите сървъри, може да почувствате нуждата да споделите SSH сесия с някого, който не е с вас в същата стая. tmux е идеалното решение за такава задача! Достатъчно е да извършите само няколко стъпки:

  1. Уверете се, че tmux е инсталиран на вашия базов хост, или на сървър, с който смятате да работите.
  2. И двамата трябва да се свържете по SSH към устройството, използвайки един акаунт.
  3. Един от вас трябва да стартира tmux, за да започне tmux сесия.
  4. Другият трябва да стартира tmux attach.
  5. Ето го! Имате споделен терминал.

Ако искате по-усъвършенствани многопотребителски tmux сесии, опитайте tmate, това е форк на tmux, който значително улеснява споделени терминални сесии.

Източник: habr.com

Купете надежден хостинг за сайтове с защита от DDoS, VPS VDS сървъри 🔥 Купете надежден хостинг за сайтове с защита от DDoS, VPS VDS сървъри | ProHoster