SSH авторизация в Linux по сертификату или ключу
Подготовил еще одну маленькую инструкция по настройки доступа к 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 на самом сервере.
Только полноправные пользователи могут оставлять комментарии. Аутентифицируйтесь пожалуйста, используя сервисы.