1、公鑰的生成
任何一個需要使用git伺服器的工程師都需要生成一個ssh的公鑰。可以通過ssh-keygen來生成
~/.ssh$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/shizhen/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/shizhen/.ssh/id_rsa.
Your public key has been saved in /home/shizhen/.ssh/id_rsa.pub.
The key fingerprint is:
a8:::f4:e6:e8:f:f:e::c9::c::ee:f [email protected]
The key's randomart image is:
首先會讓你輸入要儲存公鑰的位置,直接回車即可,接着會提示讓你重複一個密碼兩次,如果不想再使用公鑰的時候輸入密碼,直接回車即可。完成後會在home目錄下的.ssh目錄中生成兩個檔案id_rsa(私有密鑰)和id_rsa.pub(公鑰)。
将生成的公鑰即id_rsa.pub發給git倉庫的管理者。
2、架設伺服器
(1)伺服器端
最好建立一個git組,讓後再添加一個git使用者,并且添加到該組當中。
sudo adduser git
su git
cd ~
mkdir .ssh
在git使用者建立一個.ssh的目錄,将開發者的SSH公鑰添加到git這個使用者的authorized_keys這個檔案當中。如有zhangsan,lisi兩個開發者。
cat /tmp/id_rsa_zhangsan.pub >> ~/.ssh/authorized_keys
cat /tmp/id_rsa_lisi.pub >> ~/.ssh/authorized_keys
建立一個空的倉庫
cd work
mkdir project.git
cd project.git
git --bare init
使用–bare會初始化一個不帶任何工作目錄的倉庫,不會看到工程源碼。
為了不使開發者每次clone代碼的時候都輸入ip位址,可以采用DNS的方式。具體操作如下
sudo vim /etc/hosts
在裡面加入下面一行
192.168.1.100 gitserver
(2)開發者端
若沒有倉庫的情況下,需要首先建立一個倉庫。在需要建立倉庫的,目錄下執行以下的指令。
cd my_project
git init
git add . (将所有檔案加入倉庫管理)
git commit -m "initial commit"
git remote add origin git@gitserver:/home/git/work/project.git (即:git@192..:/home/git/work/project.git)
git push origin master
若本地已有倉庫,但想把其中的代碼push到我們新的伺服器上,可以直接用下面的指令
把想要push的分支代碼建立成master分支
git checkout -b master xxxxx
git push origin master
這樣一個簡單的伺服器就可以工作了,其他的開發者可以直接從伺服器上進行代碼開發了。
為了保護git伺服器,限制開發者登陸伺服器,可以采用如下的措施。
sudo vim /etc/passwd
在檔案結尾找到這樣的類
git:x:1001:1001:,,,:/home/git:/bin/bash
将其中的/bin/bash/改為/user/bin/git-shell
現在開發者隻能通過SSH來推送和擷取代碼,不能登陸ssh服務端了。
3.問題
現在的 ssh 使用同樣的方法會出現錯誤訊息
Agent admitted failure to sign using the key
解決方式 使用 ssh-add 指令将私鑰 加進來 (根據個人的密匙命名不同更改 id_rsa)
即各自的開發者執行指令
ssh-add id_rsa