Малки трикове за 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 устройството е да декодира секретния дескриптор на ключа на диска, когато ключът за криптиране е активиран.

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

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

    $ 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

В SHH 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 за неустановен UPD трафик до вашия отдалечен хост. В последствие, за свързване е достатъчно да използвате mosh user@server.

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

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

Ако искате да «идвате и си отивате, когато ви прииска» и да запазите сесия на терминала на отдалечения възел, използвайте мултиплексора на терминала tmux. Аз обожавам tmux и го използвам постоянно. Ако вашето SSH свързване се е прекъснало, за да се върнете към сесията на tmux, е достатъчно просто да се повторно свържете и да въведете 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, това е fork на tmux, който значително опростява съвместните терминални сесии.

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

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