Безпарольний SSH — це зручно і безпечно: ви входите на сервер Linux за допомогою криптографічної пари ключів, а не вразливих паролів. Нижче — простий і надійний план, як підняти ключову авторизацію, вимкнути паролі та навести лад із правами доступу Linux і користувачами. Розберемося, як зробити SSH підключення стабільним і захищеним, а також що робити, якщо щось пішло не так.

Що таке безпарольний SSH і чому це безпечніше

Замість пароля ви підтверджуєте особу приватним ключем, що зберігається лише у вас. На сервері лежить відповідний публічний ключ у файлі ~/.ssh/authorized_keys. Такий підхід захищає від брутфорсу паролів і полегшує керування доступом для різних користувачі та групи Linux.

Покрокова інструкція: від генерації ключів до вимкнення паролів

1) Генеруємо пару ключів на клієнті

Сучасний вибір — Ed25519: швидко і безпечно. Додайте коментар, щоб розуміти, для якого хоста ключ.

ssh-keygen -t ed25519 -a 100 -C "user@workstation"
# Файли за замовчуванням: ~/.ssh/id_ed25519 (приватний) і ~/.ssh/id_ed25519.pub (публічний)

2) Копіюємо відкритий ключ на сервер

Найпростіше — за допомогою ssh-copy-id:

ssh-copy-id -i ~/.ssh/id_ed25519.pub user@server.example.com

Або вручну:

ssh user@server.example.com 'mkdir -p ~/.ssh && chmod 700 ~/.ssh'
cat ~/.ssh/id_ed25519.pub | ssh user@server.example.com 'cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys'

3) Встановлюємо правильні права та налаштовуємо sshd

Дуже важливо налаштувати права доступу Linux і власника файлів. На сервері:

# Права і власники
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
chown -R "$USER":"$USER" ~/.ssh

# Резервна копія і правки sshd_config
sudo cp /etc/ssh/sshd_config{,.bak}
sudo sed -i 's/^#\?PasswordAuthentication.*/PasswordAuthentication no/' /etc/ssh/sshd_config
sudo sed -i 's/^#\?PubkeyAuthentication.*/PubkeyAuthentication yes/' /etc/ssh/sshd_config
sudo sed -i 's/^#\?ChallengeResponseAuthentication.*/ChallengeResponseAuthentication no/' /etc/ssh/sshd_config
sudo sed -i 's/^#\?PermitRootLogin.*/PermitRootLogin no/' /etc/ssh/sshd_config

# Перевірка і перезапуск
sudo sshd -t && {
  sudo systemctl reload sshd 2>/dev/null || sudo systemctl reload ssh 2>/dev/null || sudo systemctl restart sshd
}

Опція PermitRootLogin no закриє прямий вхід root, що покращить безпеку вашого сервер Linux.

4) Тестуємо SSH підключення і за бажанням — ssh-agent

Перевірте, що входите без пароля:

ssh -i ~/.ssh/id_ed25519 user@server.example.com

Щоб не вводити парольну фразу від ключа щоразу, увімкніть ssh-agent:

eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519

Зручно створити короткий аліас хоста у ~/.ssh/config:

cat << 'EOF' >> ~/.ssh/config
Host myserver
  HostName server.example.com
  User user
  IdentityFile ~/.ssh/id_ed25519
  IdentitiesOnly yes
EOF

ssh myserver

Альтернативні способи і тонкощі

Інші формати ключів і параметри

Якщо потрібна сумісність зі старими системами, можна згенерувати RSA 4096:

ssh-keygen -t rsa -b 4096 -o -a 100 -C "legacy-compat"

Для середовищ із багатьма користувачами корисно централізовано керувати ключами через конфіг AuthorizedKeysFile або використати TrustedUserCAKeys з підписаними сертифікатами (enterprise-сценарій).

Обмеження в authorized_keys для підвищення безпеки

У ~/.ssh/authorized_keys можна додати обмеження: IP-адреси, примусовий командний інтерпретатор, заборона форвардів тощо. Наприклад:

from="203.0.113.0/24",no-agent-forwarding,no-port-forwarding,no-pty ssh-ed25519 AAAAC3NzaC1lZDI1NTE5... коментар

Такі правила допомагають точніше контролювати доступ для різних користувачі та групи Linux і сервісних облікових записів.

GUI-спосіб (для робочого столу)

На робочих станціях GNOME/KDE можна керувати ключами через менеджери ключів (наприклад, Seahorse у GNOME). Створіть нову пару ключів, задайте парольну фразу, додайте публічний ключ на сервер так само, як у розділі вище, і використовуйте менеджер для автоматичного завантаження ключа в агент після входу в систему. Це зручно для регулярного SSH підключення до ваших хостів.

FAQ

Чому отримую "Permission denied (publickey)"?

Перевірте права: chmod 700 ~/.ssh і chmod 600 ~/.ssh/authorized_keys. Переконайтеся, що власник ~/.ssh — саме потрібний користувач: chown -R $USER:$USER ~/.ssh. На сервері перегляньте журнали: sudo journalctl -u sshd -b.

Як увімкнути нестандартний порт?

У /etc/ssh/sshd_config змініть Port 22 на інший, перезавантажте службу та підключайтеся так: ssh -p 2222 user@host. Не забудьте відкрити порт у firewall.

Чи можна тимчасово дозволити пароль?

Так, але не рекомендується. Тимчасово: PasswordAuthentication yes, потім sudo systemctl reload sshd. Поверніть no, коли завершите роботи.

SELinux блокує логін ключем

Відновіть контексти: restorecon -R -v ~/.ssh. Перевірте /var/log/audit/audit.log для деталей.

Як керувати доступом для команди?

Створіть групу для адміністраторів, керуйте членством (користувачі та групи Linux) і роздайте ключі централізовано (скрипти або конфіг-менеджмент). Так легше підтримувати порядок і швидко відкликати доступ.

Порада від Kernelka

Тримайте приватні ключі під надійною парольною фразою і використовуйте ssh-agent із таймаутом. Регулярно проводьте ревізію authorized_keys і вимикайте зайві доступи. Невеликий чек-ап раз на місяць — і ваш сервер Linux спатиме спокійніше 😌

Підсумок

  • Згенеруйте сучасний ключ (Ed25519) та збережіть приватний ключ у безпечному місці.
  • Додайте публічний ключ до ~/.ssh/authorized_keys і встановіть коректні права доступу Linux.
  • У sshd_config увімкніть PubkeyAuthentication і вимкніть PasswordAuthentication; забороніть root-логін.
  • Використовуйте ssh-agent і зручні аліаси у ~/.ssh/config для швидкого SSH підключення.
  • За потреби застосовуйте обмеження в authorized_keys та керуйте доступом через користувачі та групи Linux.

З таким налаштуванням ви отримаєте безпечний і комфортний доступ до свого сервера без паролів, але з максимальним контролем. 🚀