3 回答

TA貢獻(xiàn)1784條經(jīng)驗(yàn) 獲得超2個(gè)贊
~/.ssh/authorized_keys
command="[path]/gitolite-shell sitaram",[more options] ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA18S2t... command="[path]/gitolite-shell usertwo",[more options] ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEArXtCT...
首先,它會(huì)發(fā)現(xiàn)該文件中的哪個(gè)公鑰與傳入的登錄名匹配。一旦找到火柴, 它將運(yùn)行該行上的命令。例如,如果我登錄,它就會(huì)運(yùn)行 [path]/gitolite-shell sitaram
.所以首先要注意的是,這樣的用戶沒有獲得“shell訪問”,這是很好的!
(強(qiáng)制命令=沒有交互式shell會(huì)話
但是,在運(yùn)行命令之前, sshd
設(shè)置一個(gè)環(huán)境變量,稱為 SSH_ORIGINAL_COMMAND
,其中包含實(shí)際的 git
您的工作站發(fā)出的命令。 如果您沒有 command=
在授權(quán)的密鑰文件中。
什么時(shí)候 gitolite-shell
獲取控件時(shí),它將查看第一個(gè)參數(shù)(“ sitaram
", "usertwo
“,等等)以確定您是誰。然后查看 SSH_ORIGINAL_COMMAND
變量來查找要訪問的存儲(chǔ)庫,以及您是在讀還是寫。
現(xiàn)在它已經(jīng) 請(qǐng)求的用戶、存儲(chǔ)庫和訪問(讀/寫),gitite查看其配置文件,并允許或拒絕請(qǐng)求。
authorized_keys
gitolite-shell
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

TA貢獻(xiàn)1868條經(jīng)驗(yàn) 獲得超4個(gè)贊

TA貢獻(xiàn)2041條經(jīng)驗(yàn) 獲得超4個(gè)贊
檢查試圖登錄的人的公鑰 將公鑰映射到訪問控制列表。
添加回答
舉報(bào)