.git
.web
.算法
.服務器
.dom
在網上不多找到文章有提到如何將本身的 Git 遠程倉庫配置成能夠經過 SSH 公鑰方式認證的,而幾乎清一色都是告訴你怎麼經過 web 界面向 GitHub 添加 SSH 公鑰。LZ 在網上查找了一番,終於找到了辦法。ssh
對於不想看 LZ 下面羅嗦了一大堆的園友,LZ 先把結論放在這裏,直接拿去用就是了。ide
把本地用戶的 ~/.ssh/id_rsa.pub 的內容追加到 Git 服務器倉庫所屬用戶的 ~/.ssh/authorized_keys 文件的末尾便可。spa
================怎麼剛一上來就出現了==分==割==線===================================code
下面請耐心聽 LZ 羅嗦。orm
在訪問 Git 倉庫的時候,通常有兩種認證方式:
1.經過密碼進行認證:每次從遠程庫更新或推送到遠程庫時都須要輸入密碼;
2.經過 SSH 公鑰認證:服務器會自動校驗客戶端的私鑰,無需用戶手動輸入密碼。
對於第一種方式確定是很不方便的,那麼怎麼才能使 Git 服務器支持 SSH 公鑰認證呢?
下文以 Ubuntu 系統爲例,講解如何使用 SSH 公鑰認證方式訪問 Git 服務器。
步驟一,從客戶端得到 SSH 公鑰
爲了使客戶端能夠向 Git 服務器提供 SSH 公鑰,首先要確認客戶端擁有公鑰。SSH 的密鑰存儲在 ~/.ssh/ 目錄下,下面咱們查看一下這裏面都有哪些文件:
[user@local ~]$ ls .ssh/ id_rsa id_rsa_osc id_rsa_osc.pub id_rsa.pub known_hosts [user@local ~]$
上面的 xxx 和 xxx.pub 分別是一個 SSH 私鑰和公鑰。
這裏 id_rsa(私鑰) 和 id_rsa.pub(公鑰) 是一對兒,而 id_rsa_osc 和 id_rsa_osc.pub 又是一對兒私鑰和公鑰。因而可知,一個用戶是能夠擁有多個密鑰的,可是這並不影響咱們後面對 Git 服務器的配置,使用任何一個公鑰均可以。
若是用戶沒有密鑰文件,甚至連 .ssh 目錄都沒有,那麼說明用戶尚未建立 SSH 密鑰,咱們使用 ssh-keygen 命令能夠爲其生成密鑰。
[user@local ~]$ ssh-keygen -t RSA -C "user@126.com" Generating public/private RSA key pair. Enter file in which to save the key (/home/user/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/user/.ssh/id_rsa. Your public key has been saved in /home/user/.ssh/id_rsa.pub. The key fingerprint is: e1:ec:5c:cd:89:8f:83:a2:aa:5d:8a:7f:93:12:90:f4 user@126.com The key's randomart image is: +--[ RSA 2048]----+ | | | . | |... . | |o E o . + . | | . S o + | | . o o o | | .... + o . | | o.o+. . . | |oo=+.. | +-----------------+ [user@local ~]$
-t RSA 參數表示使用 RSA 算法。
-C 參數指定用戶的電子郵箱地址。
接下來 ssh-keygen 命令會詢問用戶密鑰文件的存儲路徑以及密碼等,若是不設置密碼直接鍵入回車便可。
密鑰文件默認保存在 ~/.ssh/id_rsa 和 ~/.ssh/id_rsa.pub,公鑰文件內容相似以下:
[user@local ~]$ cat .ssh/id_rsa.pub ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDVzaGljR5OjgA3VUPO/C/0eIBBhcUQ9v2glTmim1iJ2nOmqTg1lBUlgQCwaIw6f9qJk6J+ibypzJifnic90dfsItlPLBaiMd+/KqZmJymsPOsB2+aQhGXwbj3StTkA1S3KCbUFSRYj3M1CwCGBLxLSyG/wKS/wUeVXtkwAHfSfR7jzkcB5ZyZY6ioxHsMvkCA7ORPaw5zE4MJNw0K9o25sCrgC5RyPUIcEvEt4lo7weaifhNwp5Ql21lVHKknyTALXqETeAhkYrSgueH54srszYJ3A4l+JvpFhHWC/0lF+lZaWtD/VKzs9HSvyYKAs+ovGZAfZY+AC7Et+MWLtlsmf user@126.com [user@local ~]$
至此,從客戶端得到密鑰的步驟就完成了,接下來須要把公鑰發送個 Git 服務器倉庫管理員。
步驟二,搭建 Git 服務器(已有 Git 服務器管理用戶的能夠跳過此步驟)
爲了便於管理,須要在系統中創建一個單獨的用戶來管理全部的 Git 倉庫。
[user@local ~]$ sudo adduser git Adding user `git' ... Adding new group `git' (1001) ... Adding new user `git' (1001) with group `git' ... Creating home directory `/home/git' ... Copying files from `/etc/skel' ... Enter new UNIX password: Retype new UNIX password: passwd: password updated successfully Changing the user information for git Enter the new value, or press ENTER for the default Full Name []: git Room Number []: Work Phone []: Home Phone []: Other []: Is the information correct? [Y/n] y [user@local ~]$
咱們給這個用戶取名爲 git。
全部的遠程 Git 倉庫均可以在這個用戶名下創建,因此之後創建新庫或者將新用戶的 SSH 公鑰添加到服務器時,都使用這個用戶操做就能夠了。
步驟三,創建遠程倉庫(已有遠程倉庫的能夠跳過此步驟)
切換到新建的 git 賬號,並創建一個空的遠程倉庫。
[user@local ~]$ su git Password: git@Linux:/home/user$ cd ~ git@Linux:~$ mkdir project.git git@Linux:~$ cd project.git git@Linux:~/project.git$ git init --bare Initialized empty Git repository in /home/git/project.git/ git@Linux:~$
創建遠程倉庫使用 git init 命令,也能夠增長 --bare 參數。
寫不寫 --bare 參數有什麼區別呢?
咱們知道,通常從遠程 clone 下來的倉庫會生成一個獨立的目錄,在這個目錄下有當前分支最新版本的文件,同時還有一個 .git 文件夾,與 .git 同級的文件夾稱爲咱們的「工做目錄」,咱們的修改都在這個目錄中進行。而 .git 就是咱們 Git 本地倉庫的工做目錄,咱們 add 和 commit 的東西都會被提交到這個目錄中。
對 git init 命令添加 --bare 參數就表示初始化 Git 倉庫的時候不要建立本地工做目錄,因此至關於 .git 文件夾下的全部內容直接建立到當前目錄下,而不是被放到 .git 目錄下。
在 Git 服務器上創建好倉庫之後,用戶就能夠克隆這個倉庫了。等等。。還沒配置用戶 SSH 公鑰呢,這麼就讓用戶去下載,確定仍是要輸入密碼才行的。
步驟四,在 Git 服務器上爲用戶配置 SSH 公鑰
仍是先在 Git 服務器上使用 git 用戶登陸,而後爲它創建 .ssh 目錄以及 authorized_keys 文件來管理全部用戶的 SSH 公鑰。
git@Linux:~$ mkdir .ssh git@Linux:~$ touch .ssh/authorized_keys git@Linux:~$ chmod 600 .ssh/authorized_keys git@Linux:~$
authorized_keys 文件能夠保存多個用戶的 SSH 公鑰,全部公鑰被添加到這個文件中的用戶,就均可以使用 SSH 公鑰的方式進行身份認證而再也不須要經過密碼的方式認證了。
git@Linux:~$ cat /tmp/id_rsa_user1.pub >> ~/.ssh/authorized_keys git@Linux:~$ cat /tmp/id_rsa_user2.pub >> ~/.ssh/authorized_keys git@Linux:~$ cat /tmp/id_rsa_user3.pub >> ~/.ssh/authorized_keys git@Linux:~$
如今 user一、user2 和 user3 就能夠經過 SSH 公鑰來操做遠程 Git 倉庫了,快去試試吧。
參考: