SSH는 그룹이 읽을 수있는 권한을 가진 키를 사용할 수 없습니다


9

live지점을 푸시 할 때 라이브 서버에 배포하는 개발 git 서버가 있습니다. 모든 사용자는 자신의 로그인을 가지고 있으므로 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 authorized_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

이것은 내가 찾던 것보다 낫습니다. 감사합니다!
Jessie Ross

11

당신은 CAN 당신이 키의 소유자가 아니라면, 그룹 읽을 신원 파일을 사용합니다. 예를 들어 루트 사용자가 ID 파일을 소유하도록 설정하면 모든 git 저장소 사용자가 이동하도록 설정됩니다.

이것의 좋은 장점은 sudo가 필요 없다는 것입니다. 해결책은 더 간단합니다.

루트를 사용하여 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 개를 가지고있다.
Jessie Ross

1
개발자 : ssh-keygen, ssh-copy-id user@prod. 자극에 : chmod 700 ~/.ssh, chmod 600 ~/.ssh/authorized_keys.
quanta

1
문제는 여러 사용자가 있다는 것이므로 서버에있는 모든 프로젝트별로 시간을 편집하려는 모든 사용자에 대해 반복해야합니다.
Jessie Ross

아니요. 두 명의 사용자 만 추가하면됩니다. 하나는 dev에서 prod로 ssh하고 다른 하나는 git checkout...(prod에서) 실행합니다 .
quanta

post-receive그들은 모두 서로 다른 키를 가지게됩니다 후크 (dev에 기계) 나는 그것이 될 것입니다 사용자가 도움이되지 수, (따라서 사용자 권한에 따라) 변화를 추진하고 사용자가 실행됩니다. post-receive서로 다른 두 서버 에는 두 개의 후크 가 있습니다 .
Jessie Ross
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.