Использование SSH-ключа для подключения к серверу позволяет сделать работу более безопасной (снизится вероятность взлома учетной записи) и более удобной (не будет необходимости при каждом соединении вводить пароль).
Настройка авторизации по ключу состоит из создания ключа на локальном компьютере и копирования его на сервер.
Скопировать ключ на облачный сервер также можно с помощью панели управления — при создании нового VDS или переустановке системы. Кроме того, вы можете хранить ключи в панели управления, чтобы использовать их при создании серверов.
Эта инструкция подойдет для ОС Linux, MacOS, а также для версий Windows 10 начиная с 1809 — в них доступен встроенный SSH-клиент. Если у вас более ранняя версия Windows, воспользуйтесь инструкцией из пункта Старые версии Windows (без OpenSSH).
Запустите терминал или Windows PowerShell на вашем компьютере и выполните команду:
ssh-keygen
Вы увидите примерно следующее сообщение:
Generating public/private rsa key pair.
Enter file in which to save the key (/home/user/.ssh/id_rsa):
Нажмите Enter — ключ будет сохранен в указанную директорию по умолчанию.
Далее вам будет предложено задать пароль (кодовую фразу) для ключа. Вы можете задать ее или оставить пустой, просто нажав Enter. Обратите внимание, что если вы зададите кодовую фразу, ее потребуется вводить при каждой авторизации по ключу.
Процедура создания ключей завершена, ключи сохранены в директории ~/.ssh/
в файлах id_rsa
и id_rsa.pub
.
Можно скопировать значение публичного ключа прямо в терминале. Чтобы вывести его в терминал, выполните:
cat ~/.ssh/id_rsa.pub
Теперь публичный ключ необходимо скопировать на сервер.
Выполните в терминале следующую команду, указав вместо user имя пользователя, созданного на сервере, а вместо server — IP-адрес вашего сервера.
Для Linux и MacOS:
ssh-copy-id user@server
Например:
ssh-copy-id root@2.59.43.145
Для Windows:
type $env:USERPROFILE\.ssh\id_rsa.pub | ssh user@server "cat >> .ssh/authorized_keys"
Например:
type $env:USERPROFILE\.ssh\id_rsa.pub | ssh root@213.171.8.153 "cat >> .ssh/authorized_keys"
В результате содержимое файла с публичным ключом id_rsa.pub
будет скопировано в файл ~/.ssh/authorized_keys
на сервере, и в дальнейшем вы сможете устанавливать соединение с сервером, используя команду:
ssh user@server
Например:
ssh root@213.171.8.153
Если вы используете версию Windows без OpenSSH, вам потребуется специальная программа — PuTTYgen. Вы можете скачать дистрибутив puttygen.exe
с официального сайта PuTTY.
id_rsa.pub
и mykey.ppk
.На этом процедура создания ключей завершена.
В процессе копирования ключей вам потребуется утилита pageant
. Вы можете скачать дистрибутив pageant.exe с официального сайта PuTTY.
chmod 0700 ~/.ssh
touch ~/.ssh/authorized_keys
chmod 0644 ~/.ssh/authorized_keys
nano ~/.ssh/authorized_keys
pageant
— его иконка появится в трее. Щелкните по ней правой кнопкой мыши и выберите «Add Key».mykey.ppk
, сохраненному ранее, и нажмите «Open». Если при создании ключа вы указывали кодовую фразу, pageant
запросит ее на данном этапе.Authenticating with public key "rsa-key-20151220" from agent
Для того, чтобы доступ к серверу мог осуществляться только по ключу, необходимо запретить авторизацию по паролю. Для этого требуется внести правки в файл /etc/ssh/sshd_config
.
sudo nano /etc/ssh/sshd_config
PasswordAuthentication
и замените ее значение на: PasswordAuthentication no
.sudo service ssh restart
Если после выполненных действий у вас по-прежнему запрашивается пароль, проверьте, нет ли в директории
/etc/ssh/sshd_config.d/
файла50-cloud-init.conf
с директивойPasswordAuthentication yes
.Если файл присутствует — удалите его, после чего перезапустите службу SSH.
команду mkdir ~/.ssh уберите там уже будет эта папка
Спасибо, поправили 👌
Сделал по статье, не логинит по ключу
Добрый день! Мы обновили инструкцию для Windows, если вы пользуетесь этой ОС — попробуйте снова, пожалуйста. Если проблема сохраняется (или если вы используете другую ОС), напишите в поддержку из своей панели, пожалуйста, поможем разобраться.
Не понимаю в чем проблема.
PasswordAuthentication no - сделал и сохранил ... как только не перезагружал, даже через сервер. Все-равно вход работает как по ключу, так и по паролю.
Тут лучше предметно пообщаться с поддержкой, с PasswordAuthentication no ssh может запросить пароль, но по итогу принимать его не должно. Напишите нам через тикет, посмотрим и поможем.
Ильдар, здравствуйте! Перепроверили с нашими специалистами — проблема, вероятнее всего, из-за файла 50-cloud-init.conf в каталоге /etc/ssh/sshd_config.d/. Файл можно смело удалять, после чего пароль запрашиваться не будет. Добавили эту информацию в статью. Спасибо, что обратили внимание!