4

私はできる限り私のシナリオを説明しようとします:

私は debian スクイーズ サーバーで gitolite を使用しており、リポジトリにアクセスして操作できるユーザーが 3 人います。

  • alex@workbox
  • alex@homebox
  • katy@workbox

上記は、3 つの Ubuntu ボックスの対応するユーザー名とホスト名です (Alex は 2 つの場所で作業しています)。

alex@workbox私が最初にしたことは、ギトライトに追加することでした:

  1. Alex は ssh-keygen を使用して ssh キーを生成しました
  2. 彼の ssh キーを alex@workbox.pub として、ローカルの gitolite-admin クローン リポジトリの「keydir」フォルダにコピーしました。
  3. alex@workbox がリポジトリに RW アクセスできるように、ローカルの gitolite-admin クローン リポジトリの conf/gitolite.conf ファイルを変更しました。
    repo project1
    RW+ = alex@workbox
  4. いつものことをしました:
    • git add .
    • git commit -m "Added alex@workbox"
    • git push

Alex が project1 リポジトリのクローンを作成しようとすると、ユーザー " alex" のアクセスが拒否されたことを示すエラーが表示されました。
そこで、サーバーにログインして を開きまし/var/lib/gitolite/.ssh/authorized_keysた。
ファイルの最初の部分は次のとおりです。

command="/usr/share/gitolite/gl-auth-command alex",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ssh-rsa...

そのため、手動で に置き換えalexalex@workboxファイルを保存したところ、今度は Alex がリポジトリのクローンを作成し、問題なく作業することができました。

次に、上記と同じ手順を実行して Katy を追加し、 にプッシュした後gitolite-admin、ファイルを再度authorized_keys開くと、gitolite が " user@hostname" を " " に置き換えていることがわかりましたuser
したがって、のalex代わりにalex@workboxと同じでしkatyた。
その後、手動で再度置き換えてファイルを保存する必要がありました。リポジトリに対してプッシュを行うたびに、すべての " " が " " にgitolite-admin置き換えられ、ユーザーがリポジトリにアクセスできなくなることがわかりました。user@hostnameuser.ssh/authorized_keys

gitolite に " user@hostname" を保持させるにはどうすればよいですか?
サーバー上で構成する必要があるか、ローカルのクローンgitolite-adminリポジトリで構成を変更する必要がありますか?

4

2 に答える 2

2

構成構文には次のことが記載されています。

ユーザー名とリポジトリ名はできるだけシンプルにします。英数字で始める必要がありますが、その後に._、またはを含めることもできます-

ユーザー名の後に@domainname.任意でを少なくとも 1 つ含むことができます (これにより、電子メール アドレスを誰かのユーザー名として使用できます)。

あなたの命名規則は、「 」を持つための適切な構文に従っていません@

このルールの動作は、src/triggers/post-compile/ssh-authkeys

sub optionise {
    my $f = shift;

    my $user = $f;
    $user =~ s(.*/)(); # foo/bar/baz.pub -> baz.pub
    $user =~ s/(\@[^.]+)?\.pub$//; # baz.pub, baz@home.pub -> baz

    my @line = slurp($f);
    if ( @line != 1 ) {
        _warn "$f does not contain exactly 1 line; ignoring";
        return '';
    }
    chomp(@line);
    return "command=\"$glshell $user" . ( $kfn ? " $f" : "" ) . "\",$auth_options $line[0]";
}
于 2012-12-19T18:15:09.883 に答える
2
于 2012-12-20T04:31:33.557 に答える