SSH авторизация по ключу
Все конечно знают, что пароль - это хорошо… Но не так надежно, как, например, элктронные ключи. Преимущество ключей - высокая безопасность при авторизации. При использовании авторизации по ключу рекомендуется отключить авторизацию с помощью пароля. Это значительно повысит безопасность вашего сервера. А так же избавит вас от необходимости каждый раз вводить пароль при входе в систему.
Обновлено 21.03.2016
Авторизация с Windows машины с помощью PuTTY
Первое что нужно сделать, это генерировать ключ на сервере:
$ ssh-keygen -t rsa
При генерации можно указать путь/имя файлов ключей и защитить ли файлы ключей паролем. Можно ничего не вводить.
Далее переходим в каталог .ssh:
[admin@linux26.ru ~]# cd ~/.ssh
В каталоге ~/.ssh
должны быть два сгенерированных файла id_rsa
(приватный ключ) и id_rsa.pub
(публичный ключ). Содержимое файла id_rsa.pub
нужно внести в файл **authorized_keys**
. Если файла authorized_keys
не существует, он создастся:
[admin@linux26.ru .ssh]# cat id_rsa.pub >> authorized_keys
Далее на директорию .ssh
и файл authorized_keys
необходимо установить права на чтение и запись только владельцу:
[admin@linux26.ru .ssh]# chmod 600 authorized_keys
Теперь копируем приватный ключ “id_rsa” на нашу Windows машину и называем его каким-нибудь именем с расширением “.ppk”, например server-privatkey.pkk.
Прогоним ключ через puttygen. В окне puttygen нажимаем кнопку Load напротив “Load an existing private key file”, и сохраним результат, “Save private key” например как “server-privatkey.ppk”.
Добавим ключ в сеанс. Запускаем PuTTY, загружаем нужный сеанс или вводим данные для соединения и идем в “SSH - Auth”, выбираем наш приватный ключ, который был получен через обработку “puttygen”. Сохраняем сеанс.
Но удобнее использовать Pageant, который может хранить в себе ключи.
Авторизация с Linux машины
Способ 1
Для реализации авторизации по ключу проделываем следующие операции: генерируем пару ключей на том компьютере, с которого будем ходить на сервер
[admin@linux26.ru ~]# ssh-keygen -t rsa
На вопрос об имени файла можем не отвечать. По умолчанию создадутся ключи id_rsa
(приватный ключ) и id_rsa.pub
(публичный ключ) в .ssh
каталоге домашней директории. Приватный ключ ВСЕГДА остается на сервере! Если Вы хотите авторизовываться на разных серверах разными ключами, то необходимо указать полное имя файла, включая путь.
Далее мы пойдем по второму варианту, зададим имя “key_name” для файлов ключей /home/user/.ssh/key_name
:
Enter file in which to save the key (/root/.ssh/id_rsa): /home/user/.ssh/key_name
и укажем пароль для файлов ключей. Пароль для файлов ключей можно оставить пустым, но Вы рискуете, что кто нибудь может воспользоваться вашим ключом.
Переходим в директорию .ssh
[admin@linux26.ru ~]# cd .ssh
Файлы key_name и key_name.pub сгенерированы и лежат в /home/user/.ssh
[admin@linux26.ru .ssh]# ls
key_name key_name.pub
Обезопасим себя и установим на приватный ключ права 600
[admin@linux26.ru .ssh]# chmod 600 key_name
Ну а содержимое публичного ключа key_name.pub нужно поместить в файл authorized_keys удаленному серверу в домашнем каталоге .ssh того пользователя, под которым будем авторизовываться на удаленном сервере.
Если на удаленном сервере в домашней директории пользователя не существует каталога .ssh и файла authorized_keys, то действуем следующим образом уже на удаленном сервере:
[webmaster@server ~]# mkdir .ssh
[webmaster@server ~]#
[webmaster@server ~]# echo '' >> .ssh/authorized_keys
[webmaster@server ~]#
[webmaster@server ~]# chmod 700 .ssh/
[webmaster@server ~]# chmod 600 .ssh/authorized_keys
[webmaster@server ~]#
Не забудьте перенести содержимое нашего публичного ключа key_name.pub с клиентской машины в файл authorized_keys пользователя удаленного сервера.
Далее необходимо разрешить авторизацию по ключу на удаленном сервере. Это можно сделать в файле конфигурации /etc/ssh/sshd_config
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
Теперь можно попробовать авторизоваться на удаленном сервере с нашей клиентской Linux машины: [admin@linux26.ru ~]# ssh -i '/home/user/.ssh/key_name' webmaster@server ... ... ... [webmaster@server ~]#
Здесь ключ -i
указывает, что для идентификации необходимо использовать файл /home/user/.ssh/key_name
. По умолчанию ssh берет id_rsa из .ssh директории пользователя.
Способ 2 - ssh-copy-id
В большинстве дистрибутивов Linux из коробки имеется утилита ssh-copy-id, которая позволяет автоматизировать перенос содержимого вашего публичного ключа на удаленный сервер.
Например, для того, что бы вы со своей машины могли авторизовываться на удаленном сервере, необходимо всего лишь выполнить команду
[admin@linux26.ru ~]# ssh-copy-id webmaster@server
После чего ввести пароль пользователя удаленной машины “webmaster”.
Если на удаленной машине порт отличный от 22
[admin@linux26.ru ~]# ssh-copy-id -p 2202 webmaster@server