SSH авторизация в Linux по сертификату или ключу

  • Михаил
  • 10 мин. на прочтение
  • 67
  • 04 Feb 2023
  • 04 Feb 2023

Подготовил еще одну маленькую инструкция по настройки доступа к Linux серверам через SSH по ключу или сертификату, чтобы исключить возможность подбора пароля и сократить количество лишних движений в ежедневной рутине.

Настройка Linux для работы с SSH
Обычно по-умолчанию  и так всё включено и работает, но все равно убедимся что:

  • Служба/демон/сервис ssh/sshd включена и работает.
  • Указанный порт в файле /etc/ssh/sshd_config разрешен в файерволе.
  • Если ошибки sshd shuts down with “No supported key exchange algorithms” error, ставим UsePAM yes в /etc/ssh/sshd_config и после этого sudo systemctl restart sshd
     

Создаем папку, где будут храниться ПУБЛИЧНЫЕ части ключей:

mkdir ~/.ssh
chmod 0700 ~/.ssh
touch ~/.ssh/authorized_keys
chmod 0644 ~/.ssh/authorized_keys

Потом мы запишем содержимое публичной части ключа в authorized_keys.

Генерируем пару SSH
После генерации ключей по-умолчанию будут создано 2 файла:

id_rsa - приватная часть ключа, которой ни с кем нельзя делиться

id_rsa.pub - публичная часть ключа, содержимое которой нужно перенести на удаленный сервер

Генерируем пару SSH ключей на Windows 10
RSA Ключи с длиной 2048:

ssh-keygen -m PEM -t rsa -b 2048

RSA Ключи с длиной 4096:

ssh-keygen -m PEM -t rsa -b 4096

ED25519 Ключи (топовый на данный момент формат, взамен RSA:

ssh-keygen -m PEM -t ed25519

С указанием пути куда сохранить пару ключей:

ssh-keygen -m PEM -t ed25519 -f C:\Users\user/.ssh/server_user

ВАЖНО: Удаляем у сгенеренного паблик ключа группу ВСЕ и себе даём Полные права.

Ярлык для SSH подключения в Windows 10
ПКМ по пустому месту на рабочем столе > Создать > Ярлык > Расположение:

C:\Windows\System32\cmd.exe /k "ssh -p 22 -i %USERPROFILE%\.ssh\id_rsa user@server"

Генерируем пару SSH ключей на Linux

RSA Ключи с длиной 2048:

ssh-keygen -t rsa

RSA Ключи с длиной 4096:

ssh-keygen -t rsa -b 4096

ED25519 Ключи (топовый на данный момент формат, взамен RSA):

ssh-keygen -o -a 100 -t ed25519 -f ~/.ssh/id_ed25519

Копируем публичную часть ключа на другой хост с использованием SSH-Copy-ID

ssh-copy-id username@remote_host

Копируем публичную часть ключа на другой хост с использованием SSH

Если каким-то магическим образом SSH-Copy-ID нет, используем OneLiner и делаем тоже самое через SSH:

cat ~/.ssh/id_rsa.pub | ssh username@remote_host "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"

Отключение SSH авторизации по паролю

В файле /etc/ssh/sshd_config:

PasswordAuthentication no

На компьютерах под управлением Ubuntu или Debian можно использовать следующую команду:

sudo service ssh restart

На компьютерах под управлением CentOS/Fedora этот демон носит имя sshd:

sudo service sshd restart

Остальное по SSH

Чтобы вести лог подключений к SSH необходимо в файле 

vi /etc/ssh/sshd_config 

выставить значение LogLevel VERBOSE и перезапустить службу SSH 

service ssh restart

Поиск неисправностей SSH
На удаленном сервере сервере:
Разрешаем в файерволе iptables тестовый порт 2222

sudo iptables -A INPUT -p tcp --dport 2222 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
sudo iptables -A OUTPUT -p tcp --sport 2222 -m conntrack --ctstate ESTABLISHED -j ACCEPT

Запускаем отдельный экземпляр SSH на 2222 порту и пробуем подключиться

/usr/sbin/sshd -d -p 2222

На клиенте в ярлыке или команде SSH можно добавить -v для verbose и читать что там не так + лог SSH на самом сервере.