SSH: Авторизация по ключам. Беспарольный доступ

http://pro-voip.com.ua freebsdгенерируем ключи на локальном хосте под тем пользователем, с которого хотим иметь доступ к удаленному хосту
ssh-keygen -b 2048 -t rsa

создаются два ключа
.ssh/id_rsa (закрытый)
.ssh/id_rsa.pub (открытый)

копируем открытый ключ — содержимое файла id_rsa.pub — на удаленный хост в файл .ssh/authorized_keys;
если файла authorized_keys нет, создаем его.

 

ssh-keygen

-t — тип ключа — dsa или rsa;
-b — длина ключа — для rsa можно и не указывать -b 2048 — потому как это дефолтное значение;
если нужен именно беспарольный доступ по ключам — поле passphrase оставляем пустым;

ssh-keygen -b 2048 -t rsa

Generating public/private rsa key pair.
Enter file in which to save the key (/home/user/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/user/.ssh/id_rsa.
Your public key has been saved in /home/user/.ssh/id_rsa.pub.
The key fingerprint is:

 

Примечание

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

Вот следующая ситуация, имеем:

Локальный хост — host.example.com, пользователь на нем — user
Удаленный хост — server.example.com, пользователь на нем — admin

Вы — пользователь user на host.example.com и хотите иметь беспарольный доступ по ключам к server.example.com под пользователем admin.

Тогда вы на host.example.com, будучи залогиненым под своим пользователем user, генерируете ключи, которые сохраняются по умолчанию (если не задать другое) в вашем домашнем каталоге в директории .ssh

/home/user/.ssh/id_rsa
/home/user/.ssh/id_rsa.pub

На удаленном хосту в домашнем каталоге пользователя admin в директории .ssh создаете файл authorized_keys и копируете в этот файл одной строкой содержимое ранее сгенерированого на локальном хосту публичного ключа

/home/admin/.ssh/authorized_keys

Все работает:

[user@host ~]$ ssh admin@server.example.com

! При этом если измените пользователя на любой из сторон — без пароля уже не зайдете.

Например, все так же будучи залогиненым под пользователем user на host.example.com, вы ввели команду su и попали в окружение root-а на своем host.example.com, и теперь пытаетесь зайти на удаленный хост

root@host:/home/user# ssh admin@server.example.com
Password for admin@server.example.com:

— и у вас спрашивают пароль, а все потому что не тот пользователь.

! Опять-таки но — если вы root, то у вас есть доступ к любым файлам на вашей системе, в том числе и доступ к закрытому ключу /home/user/.ssh/id.rsa

поэтому с roota вы можете попасть на удаленный хост по ключам, просто указав путь к ключу с помощью опции -i

root@host:/home/user# ssh -i /home/user/.ssh/id_rsa admin@server.example.com