Сигурно управление на SSH ключове: Linux, WSL и Keychain

Сигурно управление на SSH ключове: Linux, WSL и Keychain

Здравейте! Днес ще поговорим за една тема, която е изключително важна за всеки, който работи с отдалечени сървъри. Става въпрос за сигурното управление на SSH ключовете. Независимо дали сте системен администратор, разработчик или просто любопитен ентусиаст, този материал ще ви бъде от полза. Той е писан с идеята да бъде „evergreen“ – полезен днес, утре и след години.

Защо са важни SSH ключовете?

SSH (Secure Shell) е протокол за сигурен достъп до отдалечени машини. Традиционно, достъпът се осъществяваше с потребителско име и парола. Но това е доста рисковано. Паролите могат да бъдат откраднати. Освен това, те често не са достатъчно сложни. Затова се въвеждат SSH ключовете. Те представляват двойка от криптографски ключове – публичен и частен.

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

Частният ключ остава при вас, на локалната машина.

Двата работят заедно, за да удостоверят вашата идентичност. Това е много по-сигурно от паролите.


Подробен анализ: Linux, WSL и Keychain

Сега ще разгледаме трите основни среди, в които работещите в България разработчици и системни администратори операрат.

1. Нативен Linux


В Linux света, управлението на SSH ключове често се осъществява чрез ssh-agent. Това е фонова програма, която пази вашите частни ключове в паметта, след като веднъж ги „отключите“ с вашата парола. Това ви спестява да въвеждате парола при всяка връзка.

  • Предимство: Пълна интеграция с операционната система.
  • Недостатък: Ако не се конфигурира правилно, ключовете ви могат да бъдат кеширани за твърде дълго време или изобщо да не се използват.

2. Windows Subsystem for Linux (WSL)


WSL се превърна в изключително популярна среда сред българските разработчици, които използват Windows като основна ОС, но се нуждаят от Linux инструменти. Тук нещата стават малко по-сложни.

  • Предимство: Можете да работите в предпочитаната от вас Linux среда, без да напускате Windows.
  • Предизвикателство: WSL има собствена файлова система и не споделя автоматично SSH ключове или агент с вашия Windows хост. Това води до дублиране на ключове и объркване.

3. macOS Keychain


За колегите, които работят на Apple устройства, macOS предоставя вградената система Keychain Access. Тя е сигурно хранилище за пароли, сертификати и ключове.

  • Предимство: Keychain предлага страхотна интеграция. Можете да съхраните паролата за вашия SSH ключ в Keychain и тя автоматично ще я предоставя на ssh-agent, когато е необходимо. Това е много удобно и намалява броя на въвежданията на пароли.
  • Недостатък: Това е екосистема, затворена в света на Apple.

Сравнение на подходите

Платформа/ИнструментПредимстваНедостатъци / ПредизвикателстваИдеална употреба
Нативен LinuxВисока производителност, пълен контрол, стандартна конфигурация.Изисква ръчна настройка на ssh-agent за оптимална сигурност.Системни администратори, разработчици на Linux десктоп.
WSL 2Голяма гъвкавост, достъп до Linux инструменти в Windows.Сложност при споделянето на SSH ключове между Windows и WSL; потенциално дублиране на ключове.Разработчици на Windows, които работят с Linux инструменти.
macOS KeychainОтлична интеграция и удобство, високо ниво на сигурност, автоматично управление на паролите за ключове.Вързва ви към екосистемата на Apple.Разработчици и дизайнери, работещи в macOS среда.
Специализиран софтуер (напр. 1PasswordKeePassXC)Централизирано управление, кросс-платформени решения, допълнителни функции (като споделяне в екип).Допълнителен софтуер, който изисква лиценз (за някои) и обучение.Големи екипи, компании с изискващи политики за сигурност.

Проверка на наличните ключове

Важно е да знаете, как да проверите кои ключове са налични и заредени в агента. Това е особено полезно, когато работите с множество ключове.

Първо, можете да изведете списък с всички файлове в директорията ~/.ssh. Това ви показва всички генерирани ключове, независимо дали са заредени в агента или не.

ls ~/.ssh

Резултатът ще изглежда така:

-rw------- 1 user user  399 Aug 23 08:47 id_ed25519
-rw-r--r-- 1 user user   96 Jul 26 22:00 id_ed25519.pub
-rw------- 1 user user 2610 Jul 26 14:28 server_key_rsa
-rw-r--r-- 1 user user  742 Jul 26 14:27 id_rsa.pub
-rw------- 1 user user 5742 Aug 14 15:51 known_hosts

За да видите кои ключове са заредени в ssh-agent, използвайте командата ssh-add -l (малка буква „L“).

ssh-add -l

Командата ще изведе списък на ключовете с техния „отпечатък“ (fingerprint) и коментар. Ако не се изведе нищо, това означава, че ssh-agent не работи или няма заредени ключове.


Какво да правим, ако липсва .pub файл?

Понякога се случва да имате частния ключ (id_ed25519), но публичният (id_ed25519.pub) да липсва. Може би сте го изтрили по погрешка или просто не е бил създаден. Не се притеснявайте! Можете да генерирате публичния ключ отново от частния.

Използвайте командата ssh-keygen -y.

ssh-keygen -y -f ~/.ssh/id_ed25519 > ~/.ssh/id_ed25519.pub
  • -y: Тази опция указва на ssh-keygen да извлече публичен ключ от частен.
  • -f: Указва пътя към входния файл, т.е., вашия частен ключ.
  • >: Пренасочва изхода на командата към нов файл.

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

Прехвърляне на ключове към друга виртуалка

Често се налага да прехвърлите вашия SSH ключ на друга виртуална машина (VM) или сървър. Това е лесен и сигурен процес. Най-сигурният начин е да копирате публичния ключ, а не частния. Запомнете, частният ключ трябва да остане само при вас.

Използване на ssh-copy-id

Това е най-удобният и препоръчителен метод. Командата ssh-copy-id автоматизира процеса. Тя чете вашия публичен ключ и го добавя в ~/.ssh/authorized_keys файла на отдалечената машина.

ssh-copy-id user@hostname
  • user: Потребителското име на отдалечената машина.
  • hostname: IP адресът или името на хоста на отдалечената машина.

Ще бъдете подканени да въведете паролата за отдалечения потребител. След успешно изпълнение, вашият публичен ключ е на мястото си. Можете да се свържете без парола.

Ръчно прехвърляне

Ако ssh-copy-id не е наличен или предпочитате ръчен метод, можете да го направите по следния начин:

  1. Копирайте съдържанието на публичния ключ.Bashcat ~/.ssh/id_ed25519.pub Копирайте целия изход, който започва с ssh-ed25519 ....
  2. Свържете се с отдалечената машина.Bashssh user@hostname
  3. Отворете или създайте authorized_keys файла.Bashmkdir -p ~/.ssh chmod 700 ~/.ssh nano ~/.ssh/authorized_keys
  4. Поставете публичния ключ.Поставете копирания текст в нов ред във файла. Запазете и затворете.
  5. Настройте правилните права.Bashchmod 600 ~/.ssh/authorized_keys Това е критична стъпка за сигурността. Ако правата не са правилни, SSH ще игнорира файла.

Това са основните стъпки за прехвърляне на ключове. Винаги помнете: само публичният ключ трябва да напуска вашата машина. Спазването на това правило е ключът към сигурността на вашите SSH връзки.

Как се генерират SSH ключове?

Генерирането на SSH ключове е първата стъпка. То е лесно и бързо. Ще използваме стандартния инструмент ssh-keygen. Отворете терминал на Linux или WSL. Изпълнете следната команда:

ssh-keygen -t ed25519 -C "[email protected]"

Командата -t ed25519 указва типа на ключа. Ed25519 е модерен и сигурен алгоритъм. Той е предпочитан пред старите RSA ключове. -C добавя коментар към ключа. Обикновено това е вашият имейл. Той помага за лесна идентификация.

След това ще бъдете попитани за мястото, където да се запишат ключовете. По подразбиране, това е ~/.ssh/id_ed25519. Просто натиснете Enter.

Най-важната част е паролната фраза (passphrase). Тя е допълнителен слой сигурност. Въведете силна паролна фраза. Тя предпазва частния ви ключ. Дори някой да го открадне, той няма да може да го използва без паролната фраза.

Какво означава -C "[email protected]"?

Опцията -C се използва за добавяне на коментар към публичния ключ. Този коментар не е задължителен, но е изключително полезен за идентификация, особено когато управлявате много ключове.

Коментарът може да бъде всичко, което ви помага да идентифицирате ключа. Използването на имейл е просто общоприета практика, защото имейлът е уникален за всеки потребител.

Вие можете да използвате:

  • Име на машината: proxmox1, workstation, laptop-lenovo
  • Име на проекта: project-alpha, client-beta
  • Име и фамилия: ivan-petrov
  • Всяка комбинация, която ви е удобна: dev-server-for-client-x

Управление на ключовете с ssh-agent

След като имате ключове, идва въпросът за тяхното управление. Не е удобно да въвеждате паролната фраза при всяка връзка. Тук на помощ идва ssh-agent. Това е програма, която работи във фонов режим. Тя съхранява частните ключове в паметта. Веднъж въведена, паролната фраза се запазва. ssh-agent използва „sock“ файл, за да комуникира с други програми.

Linux

На повечето Linux дистрибуции ssh-agent стартира автоматично. Ако не, можете да го стартирате ръчно. Първо, уверете се, че агентът работи.

eval "$(ssh-agent -s)"

След това добавете вашия частен ключ.

ssh-add ~/.ssh/id_ed25519

Ще бъдете подканени да въведете паролната фраза. След това ключът ви е добавен в агента. Сега можете да се свързвате без да въвеждате паролната фраза всеки път.

WSL (Windows Subsystem for Linux)

В WSL ситуацията е малко по-сложна. ssh-agent не се стартира автоматично. За да го настроите, трябва да добавите команди в стартовия файл на шела ви. Обикновено това е .bashrc или .zshrc.

Отворете файла с текстов редактор. Например:

nano ~/.bashrc

Добавете следния код в края на файла:

# Start ssh-agent if it's not running
if ! pgrep -f ssh-agent > /dev/null; then
    eval "$(ssh-agent -s)"
    ssh-add ~/.ssh/id_ed25519 &> /dev/null
fi

Този скрипт проверява дали ssh-agent е активен. Ако не е, той го стартира. След това добавя вашия ключ. За да активирате промените, изпълнете:

source ~/.bashrc

Или просто отворете нов терминал.


Използване на keychain

keychain е много полезен инструмент. Той е обвивка около ssh-agent. Основното му предимство е, че той може да „помни“ ключовете между сесиите. Това е изключително удобно. Не е нужно да въвеждате паролната фраза всеки път, когато отваряте нов терминал. keychain пази ключовете ви, докато не се изключи компютъра.

Инсталация и настройка

Инсталацията е различна за различните системи.

На Debian/Ubuntu:

sudo apt update
sudo apt install keychain

На Arch Linux:

sudo pacman -S keychain

След инсталацията, трябва да добавите keychain в стартовия файл на шела.

# Add to ~/.bashrc or ~/.zshrc
eval `keychain --eval --agents ssh --dir ~/.ssh my_ssh_key`

Тук, my_ssh_key трябва да бъде заменено с името на вашия частен ключ. Например, id_ed25519.

Сега, когато отворите нов терминал, keychain ще провери за работещ ssh-agent. Ако няма такъв, ще го стартира. Освен това, ще се опита да добави ключовете. Ако те не са заредени, ще ви подкани за паролната фраза. След това, всички нови терминали ще използват същия агент.


Управление на множество ключове

Често се налага да използвате различни ключове. Един за работа, друг за лични проекти. ssh-agent и keychain се справят отлично с това. Просто добавете всички ключове в агента.

ssh-add ~/.ssh/id_ed25519_work
ssh-add ~/.ssh/id_ed25519_personal

SSH клиентът автоматично ще опита да използва правилния ключ. За да сте сигурни, можете да използвате ~/.ssh/config. Това е конфигурационният файл на SSH клиента.

Отворете файла:

nano ~/.ssh/config

Добавете следните редове:

# Work server
Host work.example.com
    HostName 192.168.1.100
    User my_username
    IdentityFile ~/.ssh/id_ed25519_work

# Personal server
Host personal.example.com
    HostName 192.168.1.200
    User my_other_username
    IdentityFile ~/.ssh/id_ed25519_personal

След това можете да се свързвате само с името на хоста:

ssh work.example.com
ssh personal.example.com

Това прави работата ви много по-лесна и организирана.


Сигурност на ключовете

Сигурността е основен приоритет. Ето няколко съвета:

  • Паролна фраза: Винаги използвайте силна и уникална паролна фраза. Тя трябва да е дълга и да съдържа различни символи. Не я използвайте за други неща.
  • Права на достъп: Уверете се, че частният ви ключ е с правилните права. Той трябва да е достъпен само за вас.Bashchmod 600 ~/.ssh/id_ed25519 Ако правата не са правилни, SSH ще откаже да го използва.
  • Публичният ключ: Публичният ключ може да бъде виждан от всички. Не е нужно да го пазите. Просто го копирайте на сървъра.
  • Резервно копие: Направете резервно копие на вашите ключове. Съхранявайте го на сигурно място. Ако загубите частния ключ, достъпът ви до сървърите ще бъде загубен.
  • Сървърна страна: На сървъра, добавете публичния ключ в ~/.ssh/authorized_keys.

Допълнителни съвети и добри практики

  • Изключване на паролен достъп: След като настроите SSH ключовете, изключете паролния достъп. Това е важна стъпка за сигурността. Редактирайте файла /etc/ssh/sshd_config на сървъра.PasswordAuthentication no След това рестартирайте SSH услугата.
  • SSH агенти: В Windows, можете да използвате Pageant или други подобни инструменти. Те правят същото като ssh-agent.
  • Визуализация: Използвайте командата ssh-add -l за да видите кои ключове са заредени в агента.Bashssh-add -l
  • Лимитиране на достъпа: Можете да ограничите достъпа на даден ключ. В authorized_keys файла, можете да добавите опции. Например, да се забрани изпълнението на определени команди.

Заключение

Сигурното управление на SSH ключовете не е сложна задача. С правилните инструменти и малко практика, можете да постигнете високо ниво на сигурност. Разбрахме защо са важни ключовете. Видяхме как се генерират. Научихме се да ги управляваме с ssh-agent и keychain. Приложихме тези знания за Linux и WSL.

Надявам се, че този материал ви е бил полезен. Споделете го с колеги и приятели. Нека работим по-сигурно заедно. Ако имате въпроси, не се колебайте да ги зададете. Успех!

Допълнителни ресурси:

Федя Серафиев

Федя Серафиев

е DevOps технологичен ентусиаст с опит в Linux, Docker, Kubernetes и CI/CD. Той споделя практични ръководства и анализи, които помагат на специалистите да изграждат по-добри и ефективни системи. На devopsbg.net Федя предоставя актуални и полезни насоки за автоматизация, сигурност и оптимизация на инфраструктурата.

Вашият коментар

Вашият имейл адрес няма да бъде публикуван. Задължителните полета са отбелязани с *


Колко е 7 + 8 ? (въведете числото)