Иногда бывает ситуация, когда необходимо организовать авторизацию 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/1558


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

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

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

Add your comment now

Please note: JavaScript is required to post comments.