SSH ключове в Linux

SSH ключове в Linux

SSH (Secure Shell) ключовете са основен елемент в администрирането на Linux системи. Те предлагат сигурен и надежден начин за достъп до отдалечени сървъри, като заменят традиционното въвеждане на парола. SSH ключовете осигуряват криптирана комуникация и предотвратяват неоторизиран достъп.

Какво представляват SSH ключовете?

SSH ключовете са криптографски ключове, които се използват за удостоверяване на потребителите в SSH протокола. Те са два типа – публичен и частен ключ. Публичният ключ може да бъде споделен с други, докато частният ключ трябва да се пази в тайна.

Как работят SSH ключовете?

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

Видове SSH ключове

SSH ключовете са основна част от сигурността при достъпа до отдалечени сървъри и устройства чрез SSH протокола. Съществуват различни видове SSH ключове, всеки от които има свои характеристики и приложения. Ето основните типове SSH ключове, които се използват в Linux системи:

1. RSA (Rivest-Shamir-Adleman) ключове

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

  • Размер на ключа: Обикновено варира между 2048 и 4096 бита, като по-големите ключове предлагат по-висока сигурност.
  • Сигурност: RSA ключовете с 2048 бита се считат за достатъчно сигурни за повечето приложения, но 4096-битовите ключове предлагат по-дълготрайна защита.
  • Приложение: RSA ключовете са предпочитани заради своята съвместимост и са често използвани в различни платформи и среди.

2. DSA (Digital Signature Algorithm) ключове

DSA е криптографски алгоритъм, разработен като стандарт за цифров подпис от Националния институт по стандарти и технологии на САЩ (NIST).

  • Размер на ключа: Стандартният размер е 1024 бита.
  • Сигурност: Поради по-малкия размер на ключа, DSA ключовете не се считат за толкова сигурни, колкото RSA или други видове ключове, особено в съвременните условия.
  • Приложение: DSA ключовете се използват рядко днес, тъй като други типове ключове предлагат по-висока сигурност и са предпочитани.

3. ECDSA (Elliptic Curve Digital Signature Algorithm) ключове

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

  • Размер на ключа: Често използвани размери са 256, 384 или 521 бита.
  • Сигурност: ECDSA ключовете предлагат еквивалентна или по-висока сигурност от RSA ключовете, но с много по-малки ключове, което прави тяхната употреба по-ефективна.
  • Приложение: ECDSA се използва широко в съвременните криптографски приложения и е препоръчителен за нови внедрения.

4. ED25519 ключове

ED25519 е съвременен тип криптографски ключ, базиран на елиптични криви, но с опростена и по-ефективна структура.

  • Размер на ключа: Стандартно е 256 бита.
  • Сигурност: ED25519 ключовете предлагат много висока сигурност и устойчивост на атаки. Те са по-ефективни по отношение на производителност, дори и при ограничени ресурси.
  • Приложение: ED25519 се препоръчва за нови внедрения и се използва в системи, където сигурността и производителността са критични.

Сравнение и избор на SSH ключ

Изборът на SSH ключ зависи от множество фактори, включително изискванията за сигурност, съвместимостта с различни системи и платформите, на които ще се използва. Ето кратко сравнение на основните видове SSH ключове:

  • RSA: Подходящ за широк кръг от приложения, предлагайки добра сигурност и съвместимост.
  • DSA: Вече се счита за остарял и се използва рядко поради по-ниска сигурност.
  • ECDSA: Предлага висока сигурност с малки размери на ключовете, но не е толкова разпространен като RSA.
  • ED25519: Модерен и сигурен избор, подходящ за нови системи и внедрения, където ефективността е важна.

Генериране на SSH ключове в Linux

За да генерирате SSH ключове в Linux, използвайте командата ssh-keygen. Тази команда ще създаде чифт от публичен и частен ключ. След изпълнение на командата, ще бъдете подканени да изберете местоположение за съхранение на ключовете. По подразбиране, ключовете се съхраняват в директорията ~/.ssh/.

ssh-keygen -t ed25519

Командата ssh-keygen -t ed25519 се използва за генериране на нова двойка SSH ключове с криптографския алгоритъм Ed25519. Ето кратко обяснение:

  • ssh-keygen: Това е инструмент, използван за създаване на нови SSH ключове.
  • -t ed25519: Параметърът -t указва типа на ключа, който искате да генерирате. В случая това е Ed25519, който е модерен и много сигурен алгоритъм за асиметрично криптиране, базиран на елиптични криви.

Предимства на Ed25519:

  • Сигурност: Предлага висока степен на сигурност при по-малък размер на ключовете (256 бита).
  • Бързина: Ed25519 е по-бърз при генериране и удостоверяване в сравнение с по-старите алгоритми като RSA.
  • По-кратък ключ: Ключовете са по-кратки и по-лесни за управление.

След изпълнението на командата ще бъдете подканени да зададете име за файла на ключа и парола (която е по избор). Това ще създаде два файла: частен ключ и съответстващ публичен ключ.

Защита на частния ключ

Защита на частния ключ е критично важно. Никога не трябва да споделяте частния ключ с никого. Освен това, препоръчително е да добавите парола към частния ключ по време на неговото генериране. Това добавя допълнителен слой сигурност, тъй като ще трябва да въведете парола всеки път, когато използвате ключа.

Използване на SSH Agent

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

Автоматизация на логването с Ansible

Ansible е мощен инструмент за автоматизация, който може да улесни управлението на SSH ключове и логването. Чрез Ansible, можете да настроите ключовете на множество сървъри едновременно и да автоматизирате ротацията им.

За да улесните процеса на добавяне на ключа към множество сървъри, можете да използвате командата ssh-copy-id:

ssh-copy-id <потребителско_име>@<адрес_на_сървъра>

Тази команда ще копира вашия публичен ключ (обикновено ~/.ssh/id_rsa.pub) към файла authorized_keys на отдалечения сървър.

Важно: Уверете се, че сте заменили <потребителско_име> и <адрес_на_сървъра> с действителните стойности за всеки сървър.

Ansible Playbook за разполагане на SSH ключове

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

Какво представлява Ansible Playbook?

Ansible Playbook е файл на езика YAML, който съдържа списък от задачи (tasks), които трябва да бъдат изпълнени върху група от сървъри (hosts). Playbook-ът е основният инструмент за описване на желаното състояние на системите и за автоматизиране на задачите.

Разполагане на SSH ключове с Ansible Playbook

Нека разгледаме как да създадем Ansible playbook за разполагане на SSH ключове.

1. Подготовка на Ansible инвентаризация

Инвентаризацията (inventory) е файл, който съдържа списък с хостове (сървъри), върху които ще се изпълнява playbook-ът. Тя може да бъде просто текстов файл със списък от IP адреси или DNS имена на сървърите.

Примерен инвентаризационен файл hosts:

[all_servers]
10.20.20.50 
10.20.20.124 
10.20.20.32 
10.20.20.20 
10.20.20.100
10.110.110.167 
10.110.110.39 
10.110.110.22 
10.110.110.20 
10.110.110.74 
10.110.110.79 
10.110.110.11

Създайте този файл и го запазете като hosts или друго подходящо име.

Стъпка 2: Създаване на Ansible Playbook

Създайте Ansible playbook, който ще използва вашия публичен ключ примерно baihui.pub и ще го добави към всички сървъри в инвентаризацията.

Пример за playbook:

---
- name: Deploy SSH key to all servers
  hosts: all_servers
  become: yes
  tasks:
    - name: Ensure ~/.ssh directory exists
      file:
        path: "{{ ansible_env.HOME }}/.ssh"
        state: directory
        mode: '0700'
        owner: root
        group: root

    - name: Add baihui public key to authorized_keys
      authorized_key:
        user: root
        state: present
        key: "{{ lookup('file', '/home/fedia/.ssh/baihui.pub') }}"

Създайте този файл и го запазете като deploy_ssh_keys.yml или друго подходящо име.

Използване на ssh_args в Ansible конфигурацията:

Можете да добавите тези опции директно в конфигурационния файл на Ansible, за да се уверите, че Ansible използва правилния ключ и параметрите за удостоверяване.

Отворете или създайте файл ansible.cfg в директорията /home/fedia/ansible_project/ и добавете следния блок:

[defaults]
inventory = /home/fedia/ansible_project/hosts
remote_user = root

[ssh_connection]
ssh_args = -o IdentitiesOnly=yes -i /home/fedia/.ssh/baihui_rsa

Не забравяйте да зменените baihui_rsa с вашият ключ.

Изпълнение на Playbook-а с конфигурационния файл:

Сега можете да изпълните playbook-а без да добавяте допълнителни опции на командния ред, тъй като те ще бъдат взети от конфигурационния файл:

ansible-playbook -i /home/fedia/ansible_project/hosts /home/fedia/ansible_project/deploy_ssh_keys.yml -u root --private-key /home/fedia/.ssh/baihui_rsa

Структура на проекта

Пример:

Ако изберете името deploy_ssh_keys.yml, тогава структурата на вашия проект може да изглежда така:

/home/user/ansible_project/
├── hosts
└── deploy_ssh_keys.yml

Заключение

С този подход можете автоматично да добавите нов SSH ключ към множество сървъри, без да се налага да правите това ръчно за всеки сървър. Ansible playbook-ът ще се погрижи за всичко, стига да имате правилно конфигуриран достъп със съществуващ ключ.

Благодарим ви за прочитането на статията! Ако намерихте информацията за полезна, можете да дарите посредством бутоните по-долу: