Найти тему
Эникей на передержке

Вход по SSH без пароля | Авторизация по ключу SSH

Оглавление

Доступно за пару минут о настройке безопасного входа на сервер без пароля. Рассказываю подробно как настроить авторизацию c Windows ПК на сервере Linux по SSH ключу.

Подключение по ключу
Подключение по ключу

У меня несколько тестовых Linux-машин, к которым приходится часто подключаться по SSH. Вводить пароль каждый раз очень неудобно (особенно, если он имеет большую сложность), поэтому делюсь как быстро сгенерировать SSH-ключ.

Пользователи Linux могут листать сразу в конец статьи

Установка SSH клиента в Windows 10/11

На ПК с Windows потребуется установленный компонент OpenSSH.Client. Чтобы проверить его наличие в системе, запустите PowerShell от имени администратора и вставьте следующую команду:

Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH.Client*'

Если клиент установлен, в строке State будет значение "Installed", как на скрине ниже:

Клиент OpenSSH установлен
Клиент OpenSSH установлен

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

Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0

Генерация ssh-ключей в Windows 10/11

Теперь нам нужно запустить PowerShell от обычного пользователя и сгенерировать ключи для автоматической авторизации с помощью команды ssh-keygen:

Автоматическая генерация ключей
Автоматическая генерация ключей

Рассмотрим подробнее вывод команды:

  • Enter file in which to save the key - в данной строке генератор просит ввести путь для файла ключа и его имя. Чтобы ssh-клиент мог подхватить ключ автоматически, рекомендую просто нажать Enter, тогда ключ будет сохранен в стандартном расположении (указано в скобках).
  • Enter passphrase (empty for no passphrase) - здесь можно ввести пароль, с помощью которого файл приватного ключа будет зашифрован. В случае ввода пароля при подключении потребуется вводить введённую в данной строке фразу. Ниже я покажу как обезопаситься способом, рекомендуемым Microsoft, поэтому оставьте значение пустым.
  • Enter same passphrase again - повторный запрос пароля. Для нас не актуально, жмём Enter.
  • Your identification has been saved in... - путь к сгенерированному приватному ключу. Это аналог пароля от учётной записи. Получив его, злоумышленник может авторизоваться на сервере от вашего имени, поэтому необходимо его защитить.
  • Your public key has been saved in... - путь к публичному ключу, который необходимо загрузить на сервер. Публичный ключ генерируется на основе приватного ключа и составляет с последним пару.
  • В остальных строках выводится информация о сгенерированном ключе.

Как загрузить ssh-ключ на сервер?

Один из способов, это использовать scp для загрузки файла с расширением .pub:

Копирование файла на сервер с помощью scp.exe
Копирование файла на сервер с помощью scp.exe

С помощью этой команды файл my_ssh_key.pub был загружен на сервер в каталог .ssh домашней директории пользователя. Затем его содержимое нужно добавить в файл authorized_keys.

Второй способ гораздо проще. Нужно всего лишь отредактировать файл authorized_keys (находится в /home/username/.ssh), добавив в него строку с содержимым из файла публичного ключа:

Редактирование файла при помощи nano.
Редактирование файла при помощи nano.

Теперь вы можете авторизоваться на сервере по ssh без ввода пароля.

Если вы задали своё имя файлу ключа, указали нестандартный путь сохранения или просто хотите обезопасить файл приватного ключа, пункт ниже для вас:

Защита приватного ssh-ключа в Windows

Я уже говорил выше, что приватный ключ - это аналог пароля от учётной записи, поэтому его рекомендуется запаролить на этапе генерации или добавить в ssh-agent, как рекомендует официальная документация Microsoft. Служба ssh-agent запоминает приватный ключ, благодаря этому отпадает надобность хранить сгенерированный файл на ПК.

Для начала установим автоматический запуск службы и запустим её (нужны права Администратора):

Set-Service -Name ssh-agent -StartupType Automatic
Start-Service -Name ssh-agent

Используйте Get-Service ssh-agent для того, чтобы убедиться в нормальном запуске службы:

Статус Running говорит о том, что служба выполняется.
Статус Running говорит о том, что служба выполняется.

Теперь добавим в агент значение приватного ssh-ключа, указав к нему путь:

ssh-add C:\Users\Toshi\.ssh\my_ssh_key

*при наличии пробелов в пути к файлу, укажите его в кавычках

Осталось открыть PowerShell и ввести username@SERVERNAME для подключения. Если всё настроено верно, пароль запрашиваться не будет.

Когда проверили, что всё работает, удалите файл приватного ключа. На этом настройка авторизации SSH по ключу закончена.

Генерация ssh-ключей в Linux

Для линукса всё довольно проще. Сначала генерируем ключ на нашем компьютере:

ssh-keygen
Что указывать в полях вывода команды подробно описано выше в пункте "Генерация ssh-ключей в Windows 10/11"

После успешной генерации ключей, копируем публичный ключ на сервер:

ssh-copy-id anykey@10.0.0.134
anykey и 10.0.0.134 - имя пользователя и ip-адрес сервера соответственно

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

Успешное добавление ssh-ключа на сервер
Успешное добавление ssh-ключа на сервер

Введите команду 'ssh username@hostname'. Подключение должно произойти без пароля (если вы не указывали фразу на этапе генерации ключей).

Спасибо, что дочитали статью до конца. Ставьте лайк и подписывайтесь, чтобы чаще встречать подобный контент в ленте рекомендаций ;-)

Реквизиты для желающих поддержать меня материально:

Сбербанк: 2202 2013 5155 5152
Юmoney: 4048 0250 0136 0810