向git服務器添加shh公鑰


步驟一,從客戶端獲得 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 服務器上使用 authorized_keys 文件來管理所有用戶的 SSH 公鑰。

git@Linux:~$ mkdir .ssh
git@Linux:~$ touch .ssh/authorized_keys
git@Linux:~$ chmod 600 .ssh/authorized_keys 
git@Linux:~$

 

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:~$

 

現在 user1、user2 和 user3 就可以通過 SSH 公鑰來操作遠程 Git 倉庫了,快去試試吧。

 

參考:

服務器上的 Git - 生成 SSH 公鑰

服務器上的 Git - 配置服務器


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM