Авторизация через SSH ключи

📅 2 Сен 2024 15:05 | 👁 171 | 🕐 5 мин.

Почти везде и всегда пользуюсь, но почему то даже заметки не написал на эту тему в блоге. Хотя функциональность очень полезная и главное удобная!

Короткое how-to, для тех кому лень читать портянку(предполагается что на целевой машине стоит sudo и пользователь user добавлен в его группу):

  • target-server — сервер к которому мы планируем подключаться по ключу
  • user_password — пароль пользователя user на удаленном сервере

Это вариант для быстрой реализации доступа по ключам и отключения доступа по поролю. Хотелось бы сразу сказать про опцию -S в sudo, так как для выполнения sudo нужен пароль, то при помощи этой опции мы его передаем через stdin. Этого можно избежать если подключиться к серверу по ssh и выполнить эти команды в ручном режиме. Данный метод плох тем, что вы светите свой пароль, если выбран данный метод, то желательно после подключения к серверу сменить пароль пользователя.

Генерируем ключ

Первое что нам необходимо сделать, это сгенирировать пару ключей закрытый и открытый ключ:

Во время генерации отвечая на вопросы можно задать место хранения открытого и закрытого ключа, а так же указать пароль к ключу, тогда при авторизации по ключу будет запрошен пароль ключа. Вариант генерации с указанием расположения ключа:

В большинстве случаев я использую пароли на ключах, кроме тех случаев, когда ключи предназначены для работы сервисов, например для работы Ansible.

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

Теперь когда у нас есть пара приватного и открытого ключа, мы можем продолжить. Нам необходимо скопировать наш публичный ключ на целевой сервер, к которому мы будем подключаться по ключу.

Копирование через SSH-COPY-ID

Самый простой способ это использовать ssh-copy-id:

Копирование через SSH перенаправлением

Если покаким то причинам способ выше не подходит, то можно сделать следующим образом:

Данная команда добавит наш ключ в конец authorized_keys, если файла authorized_keys не будет, то он создастся.

Копирование при помощи copy/paste

В крайнем случае можно просто посмотреть содержимое нашего my-key.pub и скопировать его содержимое в каталог ~/.ssh/authorized_keys нужного пользователя на целевой машине.

Копирование при помощи SSH/SCP

После этих действий мы можем скопировать наш публичный ключ в authorized_keys. Стоит так же отметить, что в authorized_keys может содержаться множество ключей, поэтому при добавлении ключей стоит быть внимательным, чтоб не испортить ключи от других узлов или вовсе не заетреть по неосторожности.
Если на целевой машине не используются другие ключи то просто копируем наш публичный ключ в authorized_keys:

Дополнительные параметры scp

Можно использовать дополнительные параметры для модификации поведения команды scp. Например:

  • -r — копировать папки и файлы рекурсивно.
  • -p — сохранять метаданные (дата создания, владелец, правами доступа) файлов.

Авторизация по ключу

На этих этапах вы все еще использовали авторизацию по поролю. Но с этого момента вы можете попробовать авторизоваться уже по ключу:

Ключ -i указывает что нужно использовать указанный закрытый ключ для авторизации, если его не указать то будет применяться авторизация по поролю если целевая машину его поддерживает или авторизация по дефолтному ключу пользователя ~/.ssh/id_rsa

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

Дополнительные настройки сервера SSH

Основная задача выполнена, теперь по хорошему необходимо произвести дополнительные манипуляции, такие как: отключить авторизации по поролю, сменить порт, запретить вход под root`ом и т.п. настройки.

Для реализации этих задач будем использовать конфигурацию самого сервера sshd через /etc/ssh/sshd_config Открываем sshd_config и вносим правки в следующие параметры, если каких то параметров нет, нужно их добавить:

Port -меняем с 22 на что то из диапозона от 1024-49151(пользовательский диапозон портов, все что меньше системные от 0-1023, все что выше динамические от 49152-65535)

PermitRootLogin — разрешить подключаться под root. В разных ОС этот парметр может быть по умолчанию разный, в Ubuntu он равен no, в Debian же он равен yes. Yes — разрешить, No — запретить.

PasswordAuthentication — разрешить авторизацию по паролю, Yes — разрешить, No — запретить.

PermitEmptyPasswords — разрешить авторизацию с пустым паролем, по дефолту обычно — No(запрещено), но стоит всегда проверять.

PubkeyAuthentication — возможность авторизации по ключам, по умолчанию включено — значение Yes, если нужно отключить — значение No.

LoginGraceTime — время на ввод пароля, по умолчанию 2 минуты, обычно ставлю 30 секунд, этого более чем достаточно для входа.

AllowUsers — мы можем задать конкретных пользователей которым можно подключаться по ssh. Пример: AllowUsers user1 user2 user3 admin

X11Forwarding — по умолчанию Yes, если вам не требуется никаких перенаправлений к графическим программам, то лучше отключить изменив значение в No.

AllowTcpForwarding — по умолчанию Yes, если не планируете использовать проброс tcp через ssh, то лучше отключить изменив на No.

После того как внесем все изменения, перезапускаем службу sshd:

Для редактирования и перезапуска службы sshd необходимы права root.

Поделиться

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

(Required)