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. Добавьте открытый ключ пользователя sync-user в файл users_keys2 users. Я предполагаю, что все пользователи 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-репозитория настроены на работу.

Хорошим преимуществом является то, что вам не нужен sudo - решение будет более простым.

Обратите внимание, что это снова столкнется с исходной проблемой, если вы используете root для продвижения к вашему git-репо.

Линус Свелас
источник
2
Это потрясающе и намного лучше, чем ответы "не делай этого". Спасибо!
Ян МакГоуэн
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
На Dev: ssh-keygen, ssh-copy-id user@prod. На прод: chmod 700 ~/.ssh, chmod 600 ~/.ssh/authorized_keys.
Quanta
1
Проблема в том, что есть несколько пользователей, поэтому я должен повторить это для каждого пользователя, который хочет редактировать время для каждого проекта, существующего на сервере.
Джесси Росс
Нет. Вам нужно только настроить еще двух пользователей: один для ssh от разработчика до prod, а другой для запуска git checkout...(на prod).
Кванты
post-receiveКрюк (DEV машина) запускается пользователем , который толкает изменение (поэтому под разрешением пользователей) , так все они будут иметь разные ключи, я не могу , какой пользователь будет. Есть два post-receiveхука на двух разных серверах в действии.
Джесси Росс