Сервер в кармане, или просто о сложном!

главная - Статьи - Linux, FreeBSD

Авторизация SSH по ключам

Теги: SSH Linux

Задача: разрешить логин на сервер по SSH только конкретному пользователю

Считаем, что у Васи домашняя директория на сервере: /home/vasya/.

Важно: настраивая sshd на сервере, надо заранее подумать, что вы будете делать, если вдруг сессия прекратится (неверные настройки, сбой интернет и др.). Это похоже на настройку iptables. Я предполагаю, что хотя бы часть из вас, хотя бы в локальной сети, нарывались на грабли, когда после изменения конфигурации зайти на сервер можно было только локально.

1. На клиенте Windows.

Готовим ключ в Putty. Для этого на клиенте Windows запускаем puttygen.exe.
Жмем Generate, водим мышкой до полной победы.

После генерации ключа по желанию добавляем пароль ключа (Key passphrase). Надо отметить, что если вы не совсем параноик, то с паролем на ключ у вас не выйдет автологина - пароль все равно надо будет вводить! Зато не будет и головной боли, что кто-то упер ключ. В общем, сами думайте.

Сохраняем приватный ключ (например, myServer_rsa.pub) и публичный (например, myServer_rsa.ppk). И тот и другой файлы храним, но приватный храним как зеницу ока! К тому же, приватный ключ (точнее, путь к нему) надо прописать в putty.

Копируем текст из поля Public key for pasting into OpenSSH authorized_keys file вида"ssh-rsa AAA......." в блокнот (для архива) либо сразу в файл ~/.ssh/authorized_keys (про файл см. ниже) на сервер Linux. Обратите внимание, текст должен быть вставлен в одну строку! Т.е. на сервер должен попасть только публичный ключ.

 

2. На сервере.

2.1
Если нет, то создаем папку /home/vasya/.ssh
Если нет, то создаем файл /home/vasya/.ssh/authorized_keys

Примечание: если под рутом зашли, то потом надо права на папку дать юзеру, иначе vasya в папку .ssh не попадет:

# chown -R vasya:vasya /home/vasya/.ssh

Ставим минимум прав:

# chmod 600 /home/vasya/.ssh/authorized_keys
# chmod 700 /home/vasya/.ssh

2.2 Изменяем настройку сервера sshd

# nano /etc/ssh/sshd_config

...
PermitRootLogin no
MaxAuthTries 3
MaxSessions 5
AllowUsers vasya

RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile      .ssh/authorized_keys

PermitEmptyPasswords no
PasswordAuthentication no
...

2.3 Перезапуск сервера sshd:

Стойте!!! Фуф, успел )) Перед тем, как копипастить команду ниже, подумайте, что будет, если сессия разорвется, а залогиниться вы вдруг не сможете ))

# service sshd restart

Вот и все? Еще немного внимания!

2.4 Грабли

Не спешите закрывать окно консоли, чтобы радостно войти с ключом! Если что-то пойдет не так (например, сервер не примет ваш клиентский сертификат), то вы не сможете войти на сервер с удаленной консоли. Конечно, можно подойти к серверу и на нем работать, но это совсем не так удобно, а порой (например, если это удаленный хостинг) невозможно. Поэтому попробуйте сначала открыть новое окно (например, putty) и войти на сервер с ключом.

Например, если не выполнить chmod 700 на папку и chmod 600 на файл из п.2.1, вам может быть отказано в авторизации. В /var/log/secure могут быть записи такого рода:

su: pam_unix(su-l:session): session opened for user root by vasya(uid=500)
su: pam_unix(su-l:session): session closed for user root
sshd[785]: Authentication refused: bad ownership or modes for file /home/vasya/.ssh/authorized_keys
sshd[786]: Connection closed by 192.168.1.2
sshd[1451]: Authentication refused: bad ownership or modes for directory /home/vasya/.ssh
sshd[1452]: Connection closed by 192.168.1.2
sshd[1557]: User root from 192.168.1.123 not allowed because not listed in AllowUsers
sshd[1558]: input_userauth_request: invalid user root
sshd[1558]: Connection closed by 192.168.1.2

где
192.168.1.2 - сервер;
192.168.1.123 - клиент.

Надо скорректировать права доступа:

# chmod 600 /home/vasya/.ssh/authorized_keys
# chmod 700 /home/vasya/.ssh

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

Вот и все.

Авторизуйтесь для добавления комментариев!


    забыли пароль?    новый пользователь?