30 сент. 2011 г.

Авторизация пользователя по ssh с использованием rsa-ключа

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

Вначале на той машине, с которой хотите ходить везде (т. е. например, ваша рабочая) создаем пару ключей:

ssh-keygen -t dsa

Отвечаем на вопросики, даем или не даем (не рекомендуется) пароль на ключик.

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

id_dsa.pub

Далее заходим на целевой сервер и:

1. Создаем юзера командой useradd name_of_user

2. Создаем пароль нашему юзеру командой passwd name_of_user

3. Добавляем пользователя в файл /etc/sudoers (если sudo не установлен и файлика нет - устанавливаем apt-get install sudo или типа того) после похожей записи рута и изменяем или комментируем строчку требования пароля:

Defaults !requiretty

Затем после строчки %sudo ALL=(ALL) ALL пишем:

name_of_user ALL=(ALL) NOPASSWD:ALL
4. Далее есть два пути.

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

ssh-copy-id -i ~/.ssh/id_dsa.pub user@remote-host

где параметром -i передается путь в публичному ключу и кладется в папку .ssh указанного пользователя со всеми правами автоматически.

б) копируем вручную. Для этого заходим в хомяк пользователя на удаленном сервере, создаем там папку .ssh, а в ней файл authorized_keys, в который копируем наши публичные ключи - смотрите, чтобы каждый ключик был в одну строчку!

Изменяем владельца наших файлов/директорий - ссх очень чувствителен к этому.

chown -R name_of_user:name_of_user .ssh
chmod 700 .ssh
chmod 400 .ssh/authorized_keys

Всё, теперь мы можем зайти удаленно на наш сервак по ssh не указывая пароль нашего пользователя и командой sudo su - и сразу превратиться в рута без вопросов :)

Update 1.

Столкнулся с ситуацией, когда всё проделанное выше не работало для удаленного сервера Oracle Linux 6.8 (аналог RHEL/CentOS 6.8) пока я не выполнил команды:

chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys
restorecon -R -v /root/.ssh

Несмотря на то, что Selinux был выключен.