태그 보관물: private-key

private-key

SSH는 그룹이 읽을 수있는 권한을 가진 키를 사용할 수 없습니다 사용자로 실행됩니다. 원격

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가 연결을 통과하도록 강요하는 방법을 찾을 것으로 기대했지만 주위 사람들은 맹목적으로 당신이 단지 단일 사용자 이외의 것에 대한 액세스를 허용해서는 안된다는 것을 발견했습니다.



답변

간단하고 안전한 방법이 있습니다.

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


답변

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

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

루트를 사용하여 git repo로 푸시하면 원래 문제가 다시 발생합니다.


답변

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
    

답변