使用する1つの可能性~/.ssh/config
は、Match
制限の代わりに制限を使用することですHost
。特にMatch Exec
、シェルコマンドを呼び出して、宣言を適用するかどうかを決定します。bashでは、次のコマンドを使用できます。
[ git@git.company.com:gitolite-admin = $(git config --get remote.origin.url)'' ]
これはbash [
コマンドを使用して、2つの文字列が等しいかどうかを確認します。この場合git@git.company.com:gitolite-admin
、$(git config --get remote.origin.url)''
コマンドから取得した出力と文字列が一致するかどうかをテストしています。
シェルが存在するリポジトリーを識別する他のコマンドを使用できます。これが機能するためには、変数をシェルに定義することが重要$SHELL
です(私の場合)/bin/bash
。完全な例は次のようになります~/.ssh/config
。
Match Exec "[ git@git.company.com:gitolite-admin = $(git config --get remote.origin.url)'' ]"
IdentityFile ~/.ssh/gitolite-admin
IdentitiesOnly yes
ForwardAgent no
ForwardX11 no
ForwardX11Trusted no
Match Exec "[ git@git.company.com:some_repo = $(git config --get remote.origin.url)'' ]"
IdentityFile ~/.ssh/yourOwnPrivateKey
IdentitiesOnly yes
ForwardAgent no
ForwardX11 no
ForwardX11Trusted no
この例では、私はそれが前提と~/.ssh/yourOwnPrivateKey
あなた自身の秘密鍵が含まれており、それが~/.ssh/gitolite-admin
ユーザーの秘密鍵が含まれていますgitolite-admin
。Mark LongairがIdentitiesOnly yes
言及しているように、gitサーバーに提供されるキーが1つだけであることを確認する宣言を含めました。その他の宣言は、gitの標準のsshオプションにすぎません。
some_repo
異なるキーで使用したいものがいくつかある場合は、この構成を追加できます。複数のリポジトリがgit@git.company.com
あり、それらのほとんどを使用して~/.ssh/yourOwnPrivateKey
いる場合は、このキーをホストのデフォルトとして含める方が理にかなっています。この場合、次の~/.ssh/config
ようになります。
Match Exec "[ git@git.company.com:gitolite-admin = $(git config --get remote.origin.url)'' ]"
IdentityFile ~/.ssh/gitolite-admin
IdentitiesOnly yes
Host git.company.com
IdentityFile ~/.ssh/yourOwnPrivateKey
IdentitiesOnly yes
ForwardAgent no
ForwardX11 no
ForwardX11Trusted no
順序が重要であり、Host git.company.com
制限がMatch Exec
1つまたは複数の後に表示されることに注意してください。