Справочный центр
Справочный центр: Linux
Подключение к серверу с использованием SSH-ключей
Отправлено в 09 December 2014 11:04

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

Для исключения подобных уязвимостей рекомендуется использовать авторизацию с помощью SSH-ключей.

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

Открытый ключ помещается вами на сервер. Закрытый ключ хранитcя на вашей локальной машине. При подключении сервер сверяет ключи и, при их соответствии, предоставляет доступ.

Обратите внимание! Никогда и никому не предоставляйте ваш закрытый ключ. Человек, имеющий доступ к вашему закрытому ключу будет иметь доступ к вашему серверу.

 

Рассмотрим подключение к Linux-серверу с помощью SSH-ключей с машин с операционными системами Linux и Windows подробно. 

 

Подключение с Linux-машин

Первым делом вам необходимо сгенерировать пару из закрытого и открытого ключа на вашей локальной машине. Есть ряд критпографических алгоритмов, позволяющих сделать это. Как правило рекомендуется использовать ключи RSA.

Для генерации пары RSA-ключей, выполните команду:

ssh-keygen

Утилита спросит вас, куда сохранить создаваемый закрытый ключ. По умолчанию (если нажмете ENTER), ключ будет сохранен в папку .ssh вашего домашнего каталога.

Generating public/private rsa key pair
Enter file in which to save the key (/home/username/.ssh/id_rsa):

Следующим шагом вам будет предложено установить пароль на закрытый ключ.

Enter passphrase (empty for no passphrase):
Enter same passphrase again:

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

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

Установив (или не установив) пароль, вы завершите процедуру генерации SSH-ключей. Если в процессе не указывали иного, создадутся следующие файлы:

  • Закрытый ключ: ~/.ssh/id_rsa
  • Открытый ключ: ~/.ssh/id_rsa.pub

 

Теперь вам необходимо скопировать открытый ключ на сервер. Для этого необходимо выполнить следующую команду:

ssh-copy-id username@server

Где username - имя пользователя на сервере, для которого создается подключение по SSH-ключам, server - IP-адрес вашего сервера.

Вам понадобится ввести пароль этого пользователя. После этого содержимое локального файла ~/.ssh/id_rsa.pub будет добавлено в файл ~/.ssh/authorized_keys домашнего каталога соответствующего пользователя на сервере.

Теперь вы можете авторизоваться на сервере с помощью SSH-ключей с помощью команды:

ssh username@server

  

Подключение с Windows-машин

Для подключения к Linux-серверу с компьютера, на котором стоит ОС Windows понадобится дополнительное программное обеспечение, а именно бесплатный SSH-клиент PuTTY.

С помощью него вы сможете сгенерировать пару ключей и скопировать открытый ключ на сервер.

Начнем с генерации ключей. Она выполняется утилитой puttygen. Запустив ее, выберите тип ключа SSH-2 RSA и нажмите кнопку "Генерировать".

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

В графы "Парольная фраза" и "Повторить пароль" вы можете ввести пароль, которым будет защищен ваш закрытый ключ. Этот пароль будет запрашиваться при каждом использовании закрытого ключа. Установка пароля необязательна, но необходимо учесть, что любой человек, к которому попадет не защищенный паролем закрытый ключ, сможет получить доступ к вашему серверу.

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

Сохранить созданные ключи можно, нажав на кнопки "Открытый ключ" и "Личный ключ" соответственно как id_rsa.pub и privatekey.ppk, в папку, где находятся утилиты PuTTY.

 

Теперь необходимо скопировать открытый ключ на сервер. Эту операцию выполняет утилита psftp.

В открывшемся окне утилиты введите команду

open server

где server - IP-адрес вашего сервера. Согласитесь, если утилита предложит сохранить текущий ключ в кэше. Затем авторизуйтесь по логину и паролю вашего сервера и введите команду

put id_rsa.pub /tmp/id_rsa.pub

psftp сообщит, что файл скопирован на сервер:

psftp: no hostname specified; use «open host.name» to connect
psftp> open server
The server's host key is not cached in the registry. You
have no guarantee that the server is the computer you
think it is.
The server's rsa2 key fingerprint is:
ssh-rsa 2048 XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX
If you trust this host, enter «y» to add the key to
PuTTY's cache and carry on connecting.
If you want to carry on connecting just once, without
adding the key to the cache, enter «n».
If you do not trust this host, press Return to abandon the
connection.
Store key in cache? (y/n) y
login as:username
username@server's password:
Remote working directory is /root
psftp>put id_rsa.pub /tmp/id_rsa.pub
local:id_rsa.pub => remote:/tmp/id_rsa.pub
psftp>

 

Следующий шаг - добавление скопированного ключа в файл ~/.ssh/authorized_keys

Для этого необходимо запустить сам клиент putty, авторизоваться на сервере (VPS или облачном) с помощью имени пользователя и пароля, и выполнить команду

ssh-keygen -i -f /tmp/id_rsa.pub >> /username/.ssh/authorized_keys

Где username - имя пользователя на сервере, для которого создается подключение по SSH-ключам.

 

Последний шаг - добавить ваш ключ в SSH-агент.

Запустите утилиту pageant. Она будет запущена в трее. Кликните правой кнопкой на ее иконку и в открывшемся меню выберите "Добавить ключ".

Укажите путь до ранее созданного файла ключа privatekey.ppk. Если при генерации вы устанавливали на него пароль, здесь система запросит этот пароль. После его ввода ключ будет добавлен.

Теперь при указании этого имени пользователя при подключении к вашему VPS или облачному серверу через PuTTY, вы будете автоматически авторизоваться с помощью установленных SSH-ключей: 

login as: root
Authenticating with public key "rsa-key-20141209" from agent

   


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

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

Для этого вам понадобится отредактировать файл /etc/ssh/sshd_config на вашем сервере.

В файле необходимо найти директиву PasswordAuthentication, раскомментировать ее, если она закомментирована, и установить для нее значение "no":

PasswordAuthentication no

Для применения изменений понадобится перезапустить службу SSH.

После этого по логину и паролю на ваш сервер не сможет авторизоваться ни один пользователь.

(33 голосов)

© 2002—2017 ООО «Национальные телекоммуникации»