Linux. SSH без пароля

Linux admin

Ключи SSH обеспечивают более безопасный способ доступа к выделенному серверу с SSH, нежели с помощью пароля напрямую. В то время как пароль, в конечном счете,  может быть взломан путем подбора, ключи SSH почти невозможно расшифровать с помощью перебора (bruteforce) в одиночку. Создание Ключевой Пары предоставляет вам две длинные строки символов: публичный и приватный ключи. Вы можете разместить публичный ключ на любом сервере, а затем разблокировать сервер, подключившись к нему с клиента, который уже имеет закрытый приватный ключ. Когда оба ключа совпадают, система разблокирует доступ без необходимости ввода пароля. Вы можете повысить безопасность еще больше, защищая закрытый ключ  кодовой фразой.

Шаг первый – Создание RSA пары ключей.

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

ssh-keygen -t rsa

Шаг  второй – Сохранение ключа и кодовой фразы

После того, как вы ввели команду Gen Key, вы получите еще несколько запросов:

Enter file in which to save the key (/home/demo/.ssh/id_rsa):

Если вам  удобно, нажмите клавишу ввода и , сохраните файл на своем личном компьютере  (в данном случае, мой пример – пользователь называется «демо»).

Только от вас зависит, хотите ли вы использовать кодовую фразу. Ввод фразы имеет свои преимущества: безопасность ключа, независимо от того, как он зашифрован, а так же её невидимость для других пользователей, что немаловажно. Если объект защищен парольной фразой, то несанкционированным пользователям просто невозможно подключиться к процессу. Они не смогут войти в процесс не зная этой кодовой фразы, и в данной ситуации, даже покупка взломанных кодов и пользователей не решает проблему. Единственный недостаток при использовании кодовой фразы – ее придется вводить каждый раз, при использовании Ключевой Пары.

Весь процесс генерации ключа выглядит так:

ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/demo/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/demo/.ssh/id_rsa.
Your public key has been saved in /home/demo/.ssh/id_rsa.pub.
The key fingerprint is:
4a:dd:0a:c6:35:4e:3f:ed:27:38:8c:74:44:4d:93:67 demo@a
The key's randomart image is:
+--[ RSA 2048]----+
|          .oo.   |
|         .  o.E  |
|        + .  o   |
|     . = = .     |
|      = S = .    |
|     o + = +     |
|      . o + o .  |
|           . o   |
|                 |
+-----------------+

Открытый ключ в настоящее время находится в /home/demo/.ssh/id_rsa.pub . закрытый ключ (идентификация) в настоящее время находится в /home/demo/.ssh/id_rsa

Шаг третий – копирование Публичного Ключа.

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

Вы можете скопировать открытый ключ в 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"

Независимо от того, какой метод вы выбрали, вы должны увидеть что-то вроде:

The authenticity of host '12.34.56.78 (12.34.56.78)' can't be established.
RSA key fingerprint is b1:7d:13:57:2e:31:4d:5e:c3:a8:a3:c0:c4:48:86:12.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '12.34.56.78' (RSA) to the list of known hosts.
user@12.34.56.78's password: 

Теперь поопробуйте залогиниться с помощью:

ssh user@12.34.56.78

и проверьте:

~/.ssh/authorized_keys

Это необходимо для того, чтобы убедиться что мы не создали лишние ключи.

Теперь вы можете авторизоваться как user@12.34.56.78 и не увидите предложения ввода пароля. Однако, если вы установите парольную фразу, вам будет предложено ввести ключевую фразу на тот момент (и всякий раз, когда вы захотите еще войти в будущем).

Дополнительный четвертый этап –  отключить пароль для суперпользователя (администратора с root правами) в системе.

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

Для того чтобы сделать это, откройте файл SSH конфигурации:

sudo nano /etc/ssh/sshd_config

в этом файле найдите строку, которая включает PermitRootLogin и измените её, чтобы разрешить пользователям подключаться только используя их SSH ключ

PermitRootLogin without-password

Убедитесь, что изменения вступили в силу:

reload ssh (либо service sshd restart)