Безопасность
April 11, 2022

Логин по SSH с помощью сертификатов!

Оглавление:

  1. Предисловие
  2. Windows (Создание ключа и перенос его на сервер)
  3. Windows (Импорт в PuTTY)
  4. XShell
  5. Linux
  6. Отключаем аутентификацию по паролю на сервере

Предисловие:

Главный вопрос - зачем оно мне надо?

  • Так явно безопаснее, я понимаю что у большинства пароли не из трех символов, но согласитесь - подобрать значение приватного ключа, почти анрил и если мы говорим о рекомендуемых практиках для подключения через SSH - сделать пару ключей и отключить пароли это одна из лучших вещей что вы можете сделать!
  • Если вы доверяете тому месту где вы храните свой приватный ключ и немного в душе авантюрист, то вы можете аутентифицироваться на всех ваших серверах с помощью одного ключа, то-есть вы просто копируете на любой новый сервер свой публичный ключ и вот в один простой консольный кульбит у вас безопасная аутентификация одним ключом на всем вашем парке серверов!!

Вы окажите себе огромную услугу если побеспокоитесь о безопасности своего подключения заранее, до того как станете крутым дядей валидатором!)


Windows (Создание ключа и перенос его на сервер)

Открываем консоль PowerShell(ищется во встроенном поиске приложений)

Или можно использовать Windows Terminal который в моей практике хорошо зарекомендовал себя для работы с удаленными серверами

И туда пишем команду с помощью которой создадим ключевую пару:

ssh-keygen

Нам предлагают ввести путь по которому мы хотим сохранить ключ. Нажимаем Enter что-бы сохранить в папку по умолчанию)

Следом мы можем задать пароль для нашей ключевой пары, это мы делаем на свое усмотрение! (но лучше задать тогда даже если файл утечет из ваших мозолистых рук, человек обломит зубы о пароль)

Спустя какое-то время команда отработает

Дальше нам надо скопировать наш ключ на сервер:

type $env:USERPROFILE\.ssh\id_rsa.pub | ssh USERPROFILE@IP-ADDRESS "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"

Мы меняем USERPROFILE@IP-ADDRESS на свою пару имени пользователя и IP адреса сервера к которому мы подключаемся по SSH!

После этого вводите ваш пароль от сервера и ВУАЛЯ, ключ скопирован)

Если вы используете для подключения Windows Terminal или PowerShell - то переходите к отключению аутентификации по паролю, а любое последующее подключение можно выполнять указывая пароль от ключевой пары, если вы его задавали, или не указывая ничего)


Windows (Импорт в PuTTY)

Открываем PuTTYgen - он устанавливается вместе с PuTTY.

Нажимаем Import Key.

Наш ключ находится по пути C:\Users\ИМЯ-ПОЛЬЗОВАТЕЛЯ\.ssh и называется id_rsa

Если вы задавали пароль при создании ключа то вас попросят его ввести.

Нажимаем Save Private key и сохраняем его по удобному нам пути.

Открываем PuTTY и в левом меню идем по пути:

Connection>SSH>Auth

В самом низу меню настройки будет пункт:

Здесь мы выбираем файл который сохранили с помощью PuTTYgen.

Готово)

Теперь логин будет выполнятся с помощью сертификата!

Если все работает - самое время отключить аутентификацию по паролю на сервере)


XShell

Что-бы импортировать ключ в вашу готовую сессию:

Открываем параметры далее выбираем Authentication.

Ставим галку на Public Key, выбираем его и нажимаем Setup

В открывшемся окне - Browse:

Здесь мы нажимаем - Import:

В открывшемся меню выбираем файл id_rsa который мы сгенерировали в первой части гайда.

Если вы задавали пароль для вашей ключевой пары то вас попросят его ввести)

Выбираем импортированный ключ нажимаем ОК:

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

После этого можете снять галочку с пункта Password)

Так как ключ мы с вами импортировали для любого другого подключения мы сможем просто выбрать наш сертификат из списка импортированных)

Готово!)

Вы большой молодец и можете отключить аутентификацию по паролю на сервере!


Linux

Хотя, заядлые Линуксоиды меня самого поучат...)

Начинаем с команды:

ssh-keygen

Нам предлагают ввести путь по которому мы хотим сохранить ключ. Нажимаем Enter что-бы сохранить в папку по умолчанию)

Следом мы можем задать пароль для нашей ключевой пары, это мы делаем на свое усмотрение! (но лучше задать тогда даже если файл утечет из ваших мозолистых рук, человек обломит зубы о пароль)

Спустя какое-то время команда отработает

Следом мы копируем нашу ключевую пару на удаленный сервер:

ssh-copy-id -i ~/.ssh/id_rsa ИМЯ-ПОЛЬЗОВАТЕЛЯ@IP-СЕРВЕРА

Имя пользователя и IP-сервера указываем свои)

Готово)


Отключаем аутентификацию по паролю на сервере

Убеждаемся в том что логин по сертификату у вас работает, и сервер просит только пароль от ключевой пары при логине!

Открываем с помощью вашего любимого текстового редактора файл /etc/ssh/sshd_config

Если такого нет, то можно установить nano)

sudo apt update && sudo apt install nano

Для nano команда выглядит так:

sudo nano /etc/ssh/sshd_config

В этом файле нам нужно увидеть:

ChallengeResponseAuthentication no
PasswordAuthentication no
UsePAM no

Если вы видите что один из параметров уже есть в файле - просто поменяйте его значение на no!

Сохраняем изменения комбинацией клавиш Ctrl + S

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

sudo systemctl reload ssh

Вот и мы и отключили аутентификацию через пароль на нашем сервере)

Храните свой файл с ключами как зеницу ока, не забывайте свой пароль от ключевой пары и до встречи в следующих гайдах!)

Пожелания, комментарии и критика принимаются в PM на Telegram: @p_agony