Иногда бывает ситуация, когда необходимо организовать авторизацию 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). Но у меня работает и так, более того — так безопаснее 🙂
Напоминаю всем копирующим мой контент о существовании закона "Об авторском праве".
В связи с этим, прошу во избежании конфликтов при копировании данного материала, ставить на него ссылку:
Также, вы можете отблагодарить меня переслав любую сумму на любой кошелек WebMoney, для поддержания данного ресурса. Или просто админу на пиво ;)
Кошельки для получения благодарности:
R386985788805
U234140473141
Z147712360455
На данной странице нет комментариев, возможно они закрыты. Если Вы хотите оставить свой комментарий, перейдите на специально созданный раздел