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

Итак, когда то давно, я написал свой простенький биллинг в качестве дипломной работы. Основная идея была, что бы пользователи и данные о них находились в базе, а авторизация проводилась через RADIUS и в качестве VPN сервера, на тот момент я предпочел MPD (на то время, версия 2я версия, 3ка была еще не стабильная). За время его существования, у него появилось много модулей, сменился слегка интерфейс, добавилось куча пряностей. Но вот мне понадобилось его связать с другим (центральным сервером), на котором нужно было организовать раздачу IP-адресов средствами DHCP, но при этом данные брать из базы mysql.

Тогда, вот мне и пришла мысль, написать скрипт который будет формировать конфигурационный файл для DHCP сервера, после чего перезапускать его. В такой связке появилось маленькое но: Необходимо было, производить запуск скрипта с биллингового сервера, а это проще всего организовать через ssh. Каким образом? Элементарно.

1. Создаем пользователя например rconn;
2. Создаем скрипт который будет выполнять наши инструкции и привязываем его вместо пользовательского shella;
3. Организовываем безпарольный доступ пользователю с биллингового сервера на сервер где расположен скрипт.

Итак, SSH без пароля или аутентификация с использованием шифрованных ключей.

Ключи SSH. Или метод Identity/Pubkey.

Привожу несколько положительных моментов этого типа аутентификации:
1. Никто не сможет войти на сервер с Вашей учетной записью, так как им необходимо обладать приватным ключом и кодовой фразой;
2. Администратор сервера может вообще убрать пароль учетной записи, дабы исключить его дискредитацию;
3. Вы можете использовать утилиту ssh-agent и он будет предоставлять аутентификационные данные за Вас;
4. Вы можете устанавливать определенные ограничения, например запрещая перенаправление портов, выполнение определенных программ и т.д.

Генерация SSH ключей. Или создание Identity/Pubkey

Для генерации пары ключей нам необходимо воспользоваться утилитой ssh-keygen.
Запускаем утилиту на клиентской машине.

$ ssh-keygen -t rsa

Опцией -t rsa мы указали тип создаваемых ключей (возможные варианты ключей – rsa1, rsa или dsa)

Настройка сервера SSH

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

# Should we allow Identity (SSH version 1) authentication?
RSAAuthentication yes
# Should we allow Pubkey (SSH version 2) authentication?
PubkeyAuthentication yes
# Where do we look for authorized public keys?
# If it doesn't start with a slash, then it is
# relative to the user's home directory
AuthorizedKeysFile    .ssh/authorized_keys

Приведенные выше значения разрешают аутентификацию Identity/Pubkey для протокола SSH версии 1 и 2, и проверяют наличие публичных ключей в файле

$ ls $HOME/.ssh/authorized_keys.

Необходимо проверить наличие этих строк в файле конфигурации /etc/ssh/sshd_config, если таковых нету – добавить и перезапустить сервис.

Копирование файла с ключом на удалённый хост.

Два варианта:
ssh-copy-id, «ручной» вариант.

У вас должна быть утилитка ssh-copy-id и с ее помощью:

$ ssh-copy-id -i ~/.ssh/id_rsa rconn@remote.server.host

«ручной» вариант:

$ cat ~/.ssh/id_rsa | ssh -l rconn@remote.server.host 'mkdir -p .ssh;touch .ssh/authorized_keys;
cat >> .ssh/authorized_keys;chmod 700 ~/.ssh;chmod 600 ~/.ssh/authorized_keys'

или такой

localhost$ scp ~/.ssh/id_rsa.pub rconn@remote.server.host
localhost$ ssh rconn@remote.server.host
remote.server.host$ [ -d ~/.ssh ] || (mkdir ~/.ssh; chmod 700 ~/.ssh)
remote.server.host$ cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
remote.server.host$ chmod 600 ~/.ssh/authorized_keys

Вроде все сделали, все настроили – пора пробовать

$ ssh rconn@remote.server.host

Должно пустить без пароля (если только вы не ставили пароль на сам ключ).

На форумах иногда встречается мнение, о том что на каталог $/.ssh нужно поставить права доступа (chmod 700). Но у меня работает и так, более того — так безопаснее 🙂

Напоминаю всем копирующим мой контент о существовании закона "Об авторском праве".
В связи с этим, прошу во избежании конфликтов при копировании данного материала, ставить на него ссылку:

http://noted.org.ua/?p=1558


Также, вы можете отблагодарить меня переслав любую сумму на любой кошелек WebMoney, для поддержания данного ресурса. Или просто админу на пиво ;)

Кошельки для получения благодарности:
R386985788805
U234140473141
Z147712360455

На данной странице нет комментариев, возможно они закрыты. Если Вы хотите оставить свой комментарий, перейдите на специально созданный раздел

Add your comment now

You must be logged in to post a comment.