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に接続を強制的に通過させる方法で何かを見つけることを期待して周りを見回しましたが、1人のユーザー以外にはアクセスを許可すべきでないと盲目的に言っている人しか見つかりませんでした。

回答:


5

これが、シンプルで安全な方法です。

ssh転送用の新しいユーザーを作成します。これをgit-syncと呼びます。gitリポジトリのグループメンバーシップを使用して、サーバー上に同様のユーザーを作成します。sync-userの公開鍵をそのユーザーのauthorized_keys2ファイルに追加します。私はgitユーザーがすべてgitgroupのメンバーであることを前提としています。git-syncユーザーがこのグループのメンバーでもあることを確認してください。

/ etc / sudoersファイルを編集して、次のような行を含めます。

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

これにより、gitgroupグループのメンバーは、パスワードなしでコマンド/ usr / bin / bitをgit-syncとして実行できます。

次に、このようなものをpost-receiveフックに入れます。

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

これは私が探していたものより良いです、ありがとう!
ジェシー・ロス

11

あなたは、CANあなたが鍵の所有者でない限り、グループ読めるIDファイルを使用します。したがって、たとえばrootユーザーが所有するようにIDファイルを設定すると、すべてのgitリポジトリユーザーが移動するように設定されます。

これの良い利点は、sudoが必要ないことです。解決策はより簡単になります。

rootを使用してgitリポジトリにpushしている場合は、これが元の問題に再度遭遇することに注意してください。


2
これは素晴らしく、「それをしないでください」という回答よりもはるかに優れています。ありがとう!
Ian McGowan 2015

2
Permissions 0640 for 'id_rsa' are too open.

秘密鍵は秘密にしておく必要があります。誰にもそれを読ませてはいけません。

ユーザーの公開キーをリモートライブサーバーの承認済みキーとして維持したくないので、リモートライブサーバーに追加するためにgitシステムに属する一連のキーを作成しました(post-receive使用している フック内でオプションで$GIT_SSH秘密鍵を設定し-iます)。

  1. devから本番サーバーにsshするためのキーペアを設定します
  2. post-receiveフックスクリプト、このような何かを試してください:

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

「devから本番サーバーにsshへのキーペアを設定する」方法を教えてください。これが問題です。私はすでに2つの場所にあります。
ジェシーロス

1
開発者:ssh-keygenssh-copy-id user@prod。製品について:chmod 700 ~/.sshchmod 600 ~/.ssh/authorized_keys
クォンタム2012

1
問題は、複数のユーザーがいるため、サーバー上に存在するすべてのプロジェクトで時間を編集したいすべてのユーザーに対してそれを繰り返す必要があることです。
ジェシーロス

いいえ。あと2人のユーザーのみをセットアップする必要があります。1つはdevからprodにsshするユーザーで、もう1つはgit checkout...(prodで)を実行するユーザーです。
クォンタム2012

post-receiveフック(のdevのマシンが)(したがって、ユーザーの権限の下で)彼らはすべての異なる鍵を持つことになりますので、私はそれがされるユーザー助けることができない変更を推進しているユーザーによって実行されます。post-receive動作中の2つの異なるサーバーに2 つのフックがあります。
ジェシーロス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.