您好,登錄后才能下訂單哦!
對于擁有 shell 登錄權(quán)限的用戶賬號,可以用下面的語法訪問 Git 版本庫:
語法 1 : ssh://[<username>@]<server>[:<port>]/home/xxx/repo1.git
語法 2 : [<username>@]<server>:/home/xxx/repo1.git
注意 :
SSH 協(xié)議地址格式可以使用兩種不同的寫法,第一種是使用 ssh:// 開頭的標(biāo)準(zhǔn)的 SSH 協(xié)議 URL 寫法,第二種是 SCP 格式的寫法。SSH 協(xié)議標(biāo)準(zhǔn)的 URL 寫法稍嫌復(fù)雜,但是對于非標(biāo)準(zhǔn) SSH 端口(非 22)可以直接在 URL 中給出端口號。
<username> 是服務(wù)器 <server> 上的用戶賬號,如果省略用戶名,則會使用當(dāng)前登錄用戶的用戶名(配置和使用了主機(jī)別名的除外)。
<port> 為SSH 協(xié)議端口,默認(rèn)為 22。當(dāng)使用了非默認(rèn)端口時,最好使用語法1。當(dāng)然使用語法2也可以實(shí)現(xiàn),但是要通過 ~/.ssh/config 配置文件設(shè)置主機(jī)別名。
路徑 /home/xxx/repo1.git 是服務(wù)器中版本庫的絕對路徑。若用相對路徑則是相對于 username 用戶的家目錄。
如果采用口令 認(rèn)證,必須在每次連接時輸入口令。
如果采用公鑰認(rèn)證,則不用輸入口令。
SSH 協(xié)議有兩種方式來實(shí)現(xiàn) Git 服務(wù)。第一種是用標(biāo)準(zhǔn)的 SSH 賬號訪問版本庫。即用戶賬號可以直接登錄到服務(wù)器獲得 shell。對于這種使用標(biāo)準(zhǔn) SSH 賬號的方式,直接使用標(biāo)準(zhǔn)的 SSH 服務(wù)就可以了。
第二種實(shí)現(xiàn)方式是所有用戶都使用同一個專用的 SSH 賬號訪問版本庫,訪問時通過公鑰認(rèn)證的方式。雖然所有用戶用同一個賬號訪問,但可以通過在建立連接時所用的不同公鑰來區(qū)分不同的用戶身份。Gitolite 就是實(shí)現(xiàn)該方式的服務(wù)器軟件。
標(biāo)準(zhǔn) SSH 賬號和專用 SSH 賬號這兩種實(shí)現(xiàn)方式的區(qū)別:
標(biāo)準(zhǔn) SSH | Gitolite | |
賬號 | 每個用戶一個賬號 | 所有用戶公用同一個賬號 |
認(rèn)證方式 | 口令或公鑰認(rèn)證 | 公鑰認(rèn)證 |
登錄到 shell | 是 | 否 |
安全性 | 差 | 好 |
管理員需要 shell | 是 | 否 |
版本庫路徑 | 相對路徑或絕對路徑 | 相對路徑 |
授權(quán)方式 | 操作系統(tǒng)中用戶組和目錄權(quán)限 | 通過配置文件授權(quán) |
分支寫授權(quán) | 否 | Gitolite |
路徑寫授權(quán) | 否 | Gitolite |
假設(shè)難易度 | 簡單 | 復(fù)雜 |
實(shí)際上,標(biāo)準(zhǔn) SSH 也可以用公鑰認(rèn)證的方式實(shí)現(xiàn)使用用戶公用同一個賬號,不過這類似于把一個公共賬號的登錄口令同時告訴給多個人。具體操作如下:
1. 在服務(wù)器端創(chuàng)建一個公共賬號,例如 sparker。
2. 管理員收集需要訪問git服務(wù)的用戶公鑰。如 user1.pub,user2.pub。
3. 使用 ssh-copy-id 命令將各個 git 用戶的公鑰遠(yuǎn)程加入服務(wù)器的公鑰認(rèn)證列表中。
3.1. 遠(yuǎn)程操作,可以使用 ssh-copy-id 命令。
$ ssh-copy-id -i user1.pub sparker@server
$ ssh-copy-id -i user2.pub sparker@server
3.2. 如果直接在服務(wù)器上操作,則直接將文件追加到 authorized_keys文件中。
$ cat user1.pub >> ~sparker/.ssh/authorized_keys
$ cat user2.pub >> ~sparker/.ssh/authorized_keys
4. 在服務(wù)器端的 sparker 用戶主目錄下建立 git 庫,就可以實(shí)現(xiàn)多個用戶利用同一個系統(tǒng)賬號(sparker)訪問 git 服務(wù)了。
這樣做除了不必逐一設(shè)置賬號,以及用戶無須口令認(rèn)證之外,標(biāo)準(zhǔn) SSH 部署 git 服務(wù)的缺點(diǎn)一個也不少,而且因?yàn)闊o法區(qū)分用戶,也就無法針對用戶進(jìn)行授權(quán)。
為實(shí)現(xiàn)公鑰認(rèn)證,作為認(rèn)證的客戶端一方需要擁有兩個文件,即公鑰/私鑰對。一般情況下,公鑰/私鑰對文件創(chuàng)建在用戶家目錄下的 .ssh 目錄中。如果用戶家目錄中不存在 .ssh 目錄,說明 SSH 公鑰/私鑰對尚未創(chuàng)建??梢杂孟旅娴拿顒?chuàng)建:
$ ssh-keygen
該命令會在用戶家目錄下創(chuàng)建 .ssh 目錄,并在其中創(chuàng)建兩個文件:
1. id_rsa
私鑰文件,它是基于 RSA 算法創(chuàng)建的,一定要妥善保管不要泄露。
2. id_rsa.pub
公鑰文件,和 id_rsa 文件是一對兒,該文件作為公鑰文件可以公開。
創(chuàng)建了自己的公鑰/私鑰對以后,就可以使用下面的命令,實(shí)現(xiàn)無口令登錄遠(yuǎn)程服務(wù)器 (即用公鑰認(rèn)證取代口令認(rèn)證)。
$ ssh-copy-id -i .ssh/id_rsa.pub <user>@<server>
注意:
該命令會提示用戶輸入 user 在 server 上的 SSH 登錄口令。
此命令執(zhí)行成功后,再以 user 用戶用 ssh 命令登錄 server 遠(yuǎn)程主機(jī)時,不必輸入口令即可直接登錄。
該命令實(shí)際上是將 .ssh/id_rsa.pub 公鑰文件追加到遠(yuǎn)程主機(jī) serve r的 user 家目錄下的 .ssh/authorized_keys 文件中。
檢查公鑰認(rèn)證是否生效,通過 ssh 命令連接遠(yuǎn)程主機(jī),正常的話應(yīng)該直接登錄成功。如果要求輸入口令則表明公鑰認(rèn)證配置存在問題。如果 SSH 登錄存在問題,可以通過查看服務(wù)器端的 /var/log/auth.log 文件進(jìn)行診斷。
在實(shí)際使用中,有時需要使用多套公鑰/私鑰對,例如:
1. 使用默認(rèn)的公鑰訪問服務(wù)器的 git 賬號,可以執(zhí)行 git 命令,但不能進(jìn)行 shell 登錄。
2. 使用特別創(chuàng)建的公鑰訪問服務(wù)器的 git 賬號,能夠獲取 shell,登錄后可以對 Git 服務(wù)器軟件進(jìn)行升級、維護(hù)等操作。
3. 訪問 Github 使用其他公鑰(非默認(rèn)公鑰)。
從上面的說明可以看出,用戶可能擁有不止一套公鑰/私鑰對。為了創(chuàng)建不同的公鑰/私鑰對,在使用 ssh-keygen 命令時就需要通過-f參數(shù)指定不同的私鑰名稱。具體用法如下:
$ ssh-keygen -f ~/.ssh/<filename>
請將 <filename> 替換為有意義的名稱。命令執(zhí)行完畢后,會在 ~/.ssh 目錄下創(chuàng)建指定的公鑰/私鑰對:文件 <filename> 是私鑰,文件 <filename>.pub 是公鑰。
將新生成的公鑰添加到遠(yuǎn)程主機(jī)登錄用戶家目錄下的 .ssh/authorized_keys 文件中,就可以使用新創(chuàng)建的公鑰建立到遠(yuǎn)程主機(jī) <server> 的 <user> 賬戶的無口令登錄。操作如下:
$ ssh-copy-id -i .ssh/<filename>.pub <user>@<server>
現(xiàn)在用戶存在多個公鑰/私鑰對,那么當(dāng)執(zhí)行下面的 ssh 登錄命令時,用到的是哪個公鑰呢?
$ ssh <user>@<server>
當(dāng)然是默認(rèn)公鑰 ~/.ssh/id_rsa.pub。那么如何用新建的公鑰連接 server 呢?
SSH 的客戶端配置文件 ~/.ssh/config可以通過創(chuàng)建主機(jī)別名,在連接主機(jī)時選擇使用特定的公鑰。例如 ~/.ssh/config 文件中的下列配置:
host abc
user git
hostname abc.xxx.com
port 22
Identityfile ~/.ssh/abc
注意,hostname 也可以寫成 IP。
然后執(zhí)行下面的 SSH 登錄命令:
$ ssh abc
或者執(zhí)行 git 命令:
$ git clone abc:/home/abc/repo1.git
雖然這兩條命令各不相同,但是都使用了 SSH 協(xié)議,以及相同的主機(jī)別名:abc。參考上面在 ~/.ssh/config 文件中建立的主機(jī)別名,可以做出如下判斷:
1. 登錄的SSH主機(jī)名為 abc.xxx.com。
2. 登錄時使用的用戶名為 git。
3. 認(rèn)證時使用的公鑰文件為 ~/.ssh/abc.pub。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。