Ещё одна мастхев практика - доступ к линукс серверам через SSH по ключу / сертификату, чтобы исключить возможность подбора пароля и сократить количество лишних движений в ежедневной рутине 🙂

Настройка Linux для работы с SSH

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

  • Служба/демон/сервис ssh/sshd включена и работает (Шпаргалка по командам BASH)
  • Указанный порт в файле /etc/ssh/sshd_config разрешен в фаерволе (Шпаргалка по фаерволу UFW)
  • Если летит 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 необходимо в файле /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 на самом сервере.

 

Поделиться