SSH не дозволяє використовувати ключ з груповими правами для читання


9

У мене є сервер розробки git, який розгортається на живий сервер, коли liveгілка пересувається. У кожного користувача є власний логін, і тому post-receiveгачок, який виконує реалізацію в реальному часі, працює під його власним користувачем.

Оскільки я не хочу підтримувати публічні ключі користувачів як авторизовані ключі на віддаленому сервері живого сервісу, я створив набір ключів, які 'належать системі Git для додавання до віддалених живих серверів (У post-receiveгачку, яку я використовую $GIT_SSHвстановити приватний ключ з -iопцією).


Моя проблема полягає в тому, що через те, що всі користувачі можуть захотіти розгорнутись у прямому ефірі, приватний ключ системи git повинен бути принаймні груповим для читання, а SSH справді не любить цього.

Ось зразок помилки:

XXXX@XXXX /srv/git/identity % ssh -i id_rsa XXXXX@XXXXX
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0640 for 'id_rsa' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
bad permissions: ignore key: id_rsa

Я озирнувся, сподіваючись знайти щось на шляху змусити ssh просто пройти через з'єднання, але я не знайшов нічого, окрім людей, що сліпо говорять, що ви просто не повинні дозволити доступ ні до чого, крім одного користувача.

Відповіді:


5

Ось приємний простий і безпечний спосіб.

Створіть нового користувача для передачі ssh, я назву це git-sync. Створіть подібного користувача на сервері з членством у групі для сховища git. Додайте відкритий ключ для користувача синхронізації у файл, який користувачі дозволено_keys2. Я припускаю, що користувачі git є всіма членами gitgroup. Переконайтеся, що користувач git-sync також є членом цієї групи.

Тепер відредагуйте файл / etc / sudoers, щоб включити рядок типу:

%gitgroup ALL=(git-sync) NOPASSWD: /usr/bin/git

Це дозволить будь-якому члену групи gitgroup виконувати команду / usr / bin / bit як git-sync без пароля.

Тепер покладіть щось подібне у свій гачок після отримання:

sudo -u git-sync /usr/bin/git push origin

Це краще, ніж те, що я шукав, дякую!
Джессі Росс

11

Ви МОЖЕТЕ використовувати групові файли ідентифікації, які читаються групою, ПІДНЯТЬ, що ви власник ключа. Отже, просто встановіть файл посвідчення, яким належить, наприклад, користувач root, а потім всі ваші користувачі репозиторію git налаштовані.

Приємною користю для цього є те, що вам не потрібно судо - рішення буде більш простим.

Зауважте, що це знову виникне початкова проблема, якщо ви використовуєте root для переходу до свого git repo.


2
Це приголомшливо і набагато краще, ніж відповіді "не роби цього". Дякую!
Ian McGowan

2
Permissions 0640 for 'id_rsa' are too open.

Приватний ключ повинен залишатися приватним. Ви не повинні дозволяти нікому його читати.

Оскільки я не хочу підтримувати публічні ключі користувачів як авторизовані ключі на віддаленому сервері живого сервісу, я створив набір ключів, які 'належать системі Git для додавання до віддалених живих серверів (У post-receiveгачку, яку я використовую $GIT_SSHвстановити приватний ключ з -iопцією).

  1. встановити пару ключів для ssh з розробника на виробничий сервер
  2. у post-receiveсценарії гака спробуйте щось подібне:

    if [ "live" == "$branch" ]; then
        ssh -t user@prod "git --work-tree=... --git-dir=... checkout -f"
    fi
    

Як я можу "встановити пару ключів на ssh з розробника на виробничий сервер", це те, з чим у мене виникають проблеми. У мене вже є 2 на місці.
Джессі Росс

1
Про розроблювач: ssh-keygen, ssh-copy-id user@prod. Про prod: chmod 700 ~/.ssh, chmod 600 ~/.ssh/authorized_keys.
кванта

1
Проблема полягає в тому, що є кілька користувачів, тому я мушу повторити це для кожного користувача, який хоче змінити час кожного проекту, який існує на сервері.
Джессі Росс

Ні. Вам потрібно налаштувати лише двох інших користувачів: одного для ssh від розробника до продукту та іншого для запуску git checkout...(у програмі).
кванта

post-receiveКрюк (DEV машина) запускається користувачем , який штовхає зміна (тому під дозволом користувачів) , так всі вони будуть мати різні ключі, я не можу , який користувач буде. На post-receiveдії двох різних серверів два гачки.
Джессі Росс
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.