それ自体がgitoliteは、sshを必要としない層である。authorization
を知る必要があるのは、がそれを呼び出しているだけなので、その人にgitコマンドを実行させるかどうかは分かりません。
SSHは、認証のために使用されている(しかし、あなたは、例えば、同様の認証にHTTPにApacheを使用することができます)道のgitoliteが「Gitolite and ssh」で説明されているSSHによって呼び出され
、およびSSHメカニズムを使用していますforced command:
~/.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
を実行します。
最初に注意しなければならないのは、このようなユーザーは「シェルアクセス」を得られないということです。
(強制コマンド=なしの対話型シェルセッション:それだけで一つだけのスクリプト、常に同じ実行、制限付きシェルを提供します)、しかし、コマンドを実行する前に
をsshd
をワークステーションが送信した実際のgit
コマンドを含むSSH_ORIGINAL_COMMAND
という環境変数を設定します。
command=
の部分が認証済みキーファイルにない場合に実行されるコマンドです。
gitolite-shell
が制御を取得すると、それはあなたが誰であるかを判断するために、最初の引数(「sitaram
」、 『usertwo
』など)を調べます。次に、SSH_ORIGINAL_COMMAND
変数を調べて、アクセスしたいリポジトリと、読んでいるか書いているかを調べます。
ユーザ、リポジトリ、およびアクセス要求(読み取り/書き込み)がであるため、gitoliteは設定ファイルを調べ、要求を許可または拒否します。 GitoliteはPerlで書かれているので、
authorized_keys
はperlスクリプト(gitolite-shell
)を呼び出すという事実です。
これはjavascriptプログラムを呼び出すことができます。
任意のコマンドなしでGitHubの上のあなたのssh場合は、あなたの質問であなたの言及のように、グリーティングメッセージを取得します。
Gitoliteはprint_version()
function of the info
command scriptに詳述するようなメッセージを表示:
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 [email protected] running gitolite3 v3.0-12-ge0ed141 on git 1.7.3.4
late 2013 Gitolite documentationが今すべての部分を要約している図を含みます
gitoliteはオープンソースなので、コード/ドキュメントを読むことでどのように動作するかを知ることができます。 – tpg2114
私はコードを読んだので、収集できるものはperlスクリプトです。私はperlを知らないので、誰かが私が上記のものを作り出すためのすばらしい例を私に提供できることを望んでいました。 – user1813844
http://stackoverflow.com/questions/5180981/ssh-client-for-node-js – Peter