gitolite 自体は、ssh を必要としない認証レイヤーです。誰
がそれを呼び出しているかを
知る必要があるだけで、その人が git コマンドを実行することを承認するかどうかを判断できます。
SSH は認証に使用されます (ただし、たとえば、HTTP Apache を認証に使用することもできます)。
gitolite が ssh によって呼び出される方法は、「Gitolite と ssh」で説明されており、ssh メカニズムの強制コマンドを使用します。
( ~/.ssh/authorized_keys
gitolite ssh サーバー上) は次のようになります。
command="[path]/gitolite-shell sitaram",[more options] ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA18S2t...
command="[path]/gitolite-shell usertwo",[more options] ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEArXtCT...
まず、このファイル内のどの公開鍵が着信ログインと一致するかを調べます。一致が見つかると、その行に指定されたコマンドが実行されます。たとえば、ログインすると実行されます[path]/gitolite-shell sitaram
。
したがって、最初に注意すべきことは、そのようなユーザーは「シェル アクセス」を取得しないということです。これは良いことです。
(強制コマンド = 対話型シェル セッションなし:制限付きシェルのみを提供し、常に同じスクリプトを 1 つだけ実行します)
ただし、コマンドを実行する前に、ワークステーションが送信した実際のコマンドを含むsshd
という環境変数を設定します。これは、許可された鍵ファイルに
その部分がなかった場合に実行されるコマンドです。SSH_ORIGINAL_COMMAND
git
command=
制御を取得するgitolite-shell
と、最初の引数 (" sitaram
"、" usertwo
" など) を調べて、ユーザーが誰であるかを判断します。次に、SSH_ORIGINAL_COMMAND
変数を調べて、アクセスするリポジトリと、読み取りまたは書き込みのどちらを行っているかを調べます。
ユーザー、リポジトリ、およびアクセスが要求された (読み取り/書き込み)ため、 gitoliteはその構成ファイルを調べて、要求を許可または拒否します。
authorized_keys
が perl スクリプトを呼び出す ( ) のgitolite-shell
は、Gitolite が perl で記述されているためです。
JavaScriptプログラムを呼び出すことができます。
コマンドを使用せずに GitHub で ssh を使用すると、質問で言及したような挨拶メッセージが表示されます。コマンド scriptの関数で
説明されているように、Gitolite は同様のメッセージを表示します。print_version()
info
sub print_version {
chomp( my $hn = `hostname -s 2>/dev/null || hostname` );
my $gv = substr( `git --version`, 12 );
$ENV{GL_USER} or _die "GL_USER not set";
print "hello $ENV{GL_USER}, this is " . ($ENV{USER} || "httpd") . "\@$hn running gitolite3 " . version() . " on git $gv\n";
}
メッセージは次のようになります。
hello admin, this is git@server running gitolite3 v3.0-12-ge0ed141 on git 1.7.3.4
2013年後半の Gitolite のドキュメントには、すべての要素をまとめた図が含まれています。