LINUX.ORG.RU
ФорумAdmin

Синхронизация пользователей/ssh ключей

 , ,


0

2

Есть десяток контейнеров. Хочется иметь в одном месте конфиг со

  • списом пользователей
  • список их публичных ssh-ключей для входа
  • список серверов/групп в которые этот пользователь входит

Разворачивать домен ради этого не хочется. Делать велосипед - тоже. Как это лучше сделать?

★★★★★

Ответ на: комментарий от imul

Вопрос собственно в том, как его синхронизировать.

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

Tanger ★★★★★ ()
Ответ на: комментарий от Tanger

Я точно не знаю всей задачи целиком, но можно посмотреть в сторону ldap. Там можно что угодно хранить и централизовано управлять. Остается только сделать правильную схему и как-то натанцевать с бубнами чтобы локально из лдап сервера это использовалось.

imul ★★★★★ ()
Ответ на: комментарий от imul

Я точно не знаю всей задачи целиком

Задача которую хочется решить - весьма простая. Есть несколько пользователей и несколько серверов. Пользователи иногда добавляются, иногда удаляются.

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

Хочется иметь возможность централизовано хранить пользовательские pub-ключи и раскидывать по серверам + добавлять/блокировать пользователей.

но можно посмотреть в сторону ldap

Можно. Но у меня предубеждение, что ldap без бубнов не заводится. И, кажется, что он слишком большой для текущей задачи.

Tanger ★★★★★ ()
Ответ на: комментарий от Tanger

LDAP прекрасно решает эту задачу, с sssd заводится с полпинка(хотя у меня еще есть пара инсталляций на классических pam_ldap/nss_ldap). Если тошнит от ldif-ов и консоли, есть GUI-клиенты. Я правда более-менее нормвльные видел только на Java или веб - сам гоняю phpldapadmin

anonymous ()

Разверну свой ответ — когда-нибудь самому пригодится

Пишешь playbook вроде такого (назовем его, скажем, playbook.yml):

---
- hosts: all
  vars:
    users:
    - name: user1
      groups:
        - group1
        - group2
      pubkey: AAAAB3NzaC1yc2EAAAADAQABAAABgQCwEvZarjnOBurCM1UclwHCgYq9IUiEtxu/M7+8n76s5f71NtS8jMK+nFJdrJ5qkDbnFQXQtnM3EYCubDCm/rV6/iYKh0pFJ8oh5Nmss+i/tAyM+CgzE3AzOJT6Fv4SZYhc89kisHOkQduN4qXZIVhhZb07KRhYIhDZ6lb90AXj9eEPpq/FKT5kvgSWuDLsWvZhW1QUcMajGpGh5Wrio2dHUkWPlgpFmnA1ZpGeyIwpxBKs13cfdsdNyCmSSdaUfgBHORMNX+tfOwbWATVA6YwS+I8nQewSQQJEKXgmTE9BShBv0THhwpF2NY6ZXlVtCmmv6R3bk4s0zAVaeuvB5RE1L+PuGV9W6nB9HqdJRalcAvMt05v5pXusY5ElxGE9GDNG3Iq8rXAxeQIO7nckt5CX4dnh5DAxjXMeG9cJe69UIRgoUUk3Wo+uzJt1qdNYzALseQokSeoWPdCCdlSemPvg4tif79whUiB4FO00kvCNXciOgFrOSp2yyNA5OdbO0zc=
    - name: user2
      groups:
        - group1
        - group2
      pubkey: AAAAB3NzaC1yc2EAAAADAQABAAABgQCwEvZarjnOBurCM1UclwHCgYq9IUiEtxu/M7+8n76s5f71NtS8jMK+nFJdrJ5qkDbnFQXQtnM3EYCubDCm/rV6/iYKh0pFJ8oh5Nmss+i/tAyM+CgzE3AzOJT6Fv4SZYhc89kisHOkQduN4qXZIVhhZb07KRhYIhDZ6lb90AXj9eEPpq/FKT5kvgSWuDLsWvZhW1QUcMajGpGh5Wrio2dHUkWPlgpFmnA1ZpGeyIwpxBKs13cfdsdNyCmSSdaUfgBHORMNX+tfOwbWATVA6YwS+I8nQewSQQJEKXgmTE9BShBv0THhwpF2NY6ZXlVtCmmv6R3bk4s0zAVaeuvB5RE1L+PuGV9W6nB9HqdJRalcAvMt05v5pXusY5ElxGE9GDNG3Iq8rXAxeQIO7nckt5CX4dnh5DAxjXMeG9cJe69UIRgoUUk3Wo+uzJt1qdNYzALseQokSeoWPdCCdlSemPvg4tif79whUiB4FO00kvCNXciOgFrOSp2yyNA5OdbO0zc=
  tasks:
    - name: Add users
      user:
        name: '{{ item.name }}'
        groups: '{{ item.groups }}'
      loop: '{{ users }}'
    - name: Set SSH pubkeys
      authorized_key:
        user: '{{ item.name }}'
        key: '{{ item.pubkey }}'
      loop: '{{ users }}'
и говоришь ansible-playbook playbook.yml -b -i host1,host2,host3, (запятая в конце принципиальна), в результате чего на host1, host2 и host3 будут созданы user1 и user2, входящие в group1 и group2. Предполагается, что ты можешь ssh'нуться на host1, host2 и host3 и sudo'шнуться там в root'а без пароля (если это не так, см. http://docs.ansible.com).

dexpl ★★★★★ ()