Беспарольный доступ по SSH

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

Создание и использование ключа
Генерируем ключ следующей командой на машине, с которой хотим подключаться к серверу.

$ ssh-keygen
или
$ ssh-keygen -t rsa
И отвечаем на несколько вопросов.

Generating public/private rsa key pair.
Enter file in which to save the key (/Users/taly/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /Users/taly/.ssh/id_rsa.
Your public key has been saved in /Users/taly/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:mi1o/XMVfO+2ZISdfgk9fdg8j9giKObZusp1Gwk taly@MacBook
The key's randomart image is:
+---[RSA 2048]----+
|                 |
|                 |
|        .    .   |
|            = o  |
|   E . .B  . + o |
|  . ooo+. . o . .|
|.o o+TTo.o o   + |
|*o.  =o.  o   o o|
|OB+=   o.o     o.|
+----[SHA256]-----+
Теперь открываем файл с публичным ключом. По-умолчанию этот файл находится ~/.ssh/id_rsa.pub

$ more ~/.ssh/id_rsa.pub
И копируем всё содержимое, которое выглядит подобным образом. Там всего одна строка

ssh-rsa AAAAB3...HjK8h taly@MacBook
Подключаемся к серверу, к которому будем подключаться без пароля, и открываем в редакторе файл c ключами.

$ ssh root@myserver
root@myserver's password:

### Welcome to server! ###
root@myserver$ nano ~/.ssh/authorized_keys
Добавляем новую строку с публичным ключом, который сгенерировали ранее.

Сохраняем файл и выходим из редактора. Ctrl+X, Y, Enter — для nano.

(Вы можете скопировать открытый ключ в authorized_keys машины с помощью команды ssh-copy-id. Не забудьте заменить имя пользователя и IP-адрес из примера ниже, на нужные вам.
ssh-copy-id user@123.45.56.78
Либо вы можете вставить в ключи с использованием SSH:
cat ~/.ssh/id_rsa.pub | ssh user@123.45.56.78 "mkdir -p ~/.ssh && cat >>  ~/.ssh/authorized_keys")

Покидаем сервер, чтобы проверить работу ключа.
 
root@myserver$ exit
Теперь вы можете авторизоваться на сервере со своего компьютера без необходимости вводить пароль.

$ ssh root@myserver.ru
Если подключение к серверу должно осуществляется не по стандартному порту 22, а по какому-то другому, например, 1000, то укажите его после ключа -p

$ ssh root@myserver.ru -p 1000
Файл конфигурации
Также вы можете на своем компьютере создать файл с настройками подключений.

$ nano ~/.ssh/config
И по подобию добавьте параметры для подключений.

Host customNameForHost
   HostName mysite.ru
   Port 22
   User root
   IdentityFile ~/.ssh/id_rsa

Host myAnotherServer
   HostName mysite2.ru
   Port 22
   User root
   IdentityFile ~/.ssh/id_rsa
Теперь можно подключиться к серверу, используя только название хоста, которое вы указали в конфигурационном файле.

$ ssh customNameForHost
$ ssh myAnotherServer

Создание SSH-ключей на Windows с PuTTYgen

Если вы используете ОС Windows, то подключиться по SSH к вашему (Linux) серверу можно через PuTTY или OpenSSH. Генерация ключей в этом случае выполняется также при помощи этих программ. В примере мы используем клиент PuTTY.

Запустите приложение PuTTYgen, которое устанавливается вместе с PuTTY.
Выберите тип ключа SSH2-RSA и нажмите Generate.
В процессе генерации ключей несколько раз произвольно проведите мышкой по экрану приложения для создания случайных величин, используемых для ключей.
После завершения создания ключей открытый ключ выводится на экран, закрытый хранится в памяти приложения. Чтобы сохранить эти ключи нажмите Save public key и Save private key. Укажите расположение файлов с ключами.
При сохранении закрытого ключа, если не заполнено поле Key passphrase, появится запрос «Хотите ли вы сохранить ключ без секретной фразы?»
Теперь открытый ключ необходимо скопировать на сервер в файл authorized_keys. Используйте WinSCP или другой клиент для работы с файлами на удалённом Linux-сервере. Вы можете скопировать файл с открытым ключом целиком на сервер, чтоб его копия хранилась в папке .ssh
Откройте файл authorized_keys через WinSCP и файл, в который вы сохранили открытый ключ (public), на локальном компьютере текстовым редактором. Скопируйте значение ключа, сохраните и закройте файл в WinSCP.
При запуске PuTTY укажите путь к закрытому ключу на локальном компьютере. Для этого во вкладке Connections → Auth выберите необходимый путь.



Теперь можно отключить на сервере аутентификацию по паролю и использовать только SSH-ключи.


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

Подключитесь к серверу по SSH, используя пароль, и откройте файл sshd_config для редактирования.vi /etc/ssh/sshd_config


Убедитесь, что указан правильный путь к открытым ключам SSH, поставьте значение параметра PasswordAuthentication no.
Перезапустите службу sshd.  
service sshd restart

Подключитесь к серверу по SSH без использования пароля. Например, запустите PuTTY, проверьте, что во вкладке Connections -> Auth содержится путь к закрытому ключу и откройте подключение.
В случае успешной аутентификации по SSH-ключу вы получите доступ к командной строке сервера и сообщение вида Authenticating with public key "rsa-key-20170510", где rsa-key-20170510 — имя применённого закрытого ключа, указанное вами в файле authorized_keys.

Комментарии

Популярные сообщения из этого блога

Права на папки и файлы (unix/chmod)

Автоматическое монтирование дисков и разделов в Linux или что такое fstab? Проблема Debian

Как подключить сетевой диск Windows в Linux