情景: 公司有多個項目放在gitlab上。有公司gitlab的賬號密碼,能正確登陸網頁並看到各個項目的commit啊branch啊等等信息。
- 稍微要注意的一點是這個域名並沒有對外發布,不配置一下host文件,根本ping不通,當然也就沒辦法瀏覽網頁。
- 再就是我的server系統也沒有裝X界面,不方便在git clone的時候輸入賬號密碼,所以直接選擇使用ssh
一、首先解決下source server沒辦法ping通的問題:在host文件里加一行解析服務器的配置。
格式:解析服務器IP domain
舉個栗子: 1.1.1.1 gitlab.a.com.
Host文件:
windows文件位置:"C:\Windows\System32\drivers\etc\hosts"
linux文件位置:/etc/hosts
二、在要下載代碼的機器上ping一下代碼主機,能通就可以着手配置SSH了。
SSH配置,以linux系統為例。
- 首先,生成ssh key。
- 運行
ssh-keygen -t rsa -C "<你的登錄郵箱>"
直接去gitlab上ssh的help那里可以復制上面這行命令
命令運行會詢問你生成文件的路徑和名字,如果默認路徑(~/.ssh/id_rsa)原來有文件了,建議你隨便取個名字。
- 下面這兩行我就直接為空了,回車就行:
- Enter passphrase (empty for no passphrase):
- Enter same passphrase again:
- 運行成功后生成的文件有兩個,一個id_rsa 一個 id_rsa.pub。.pub是公鑰,我們復制到gitlab網頁上個人信息里的key就是這個文件里的全部內容。
- 運行
- 用ssh-add命令來設置ssh代理
- ssh-add -l
- 列一下機器都代理了哪些key. 如果顯示:Could not open a connection to your authentication agent. 說明沒代理,需要把ssh-egent啟動bash: exec ssh-agent bash
- ssh-add -D
- 如果顯示已有代理,可以清空一下。(如果你的機器只有你自己用的話…)
- ssh-add ~
/.ssh/
n
- 就是剛才上面生成的那個私鑰n
- 再運行一下步驟1中的命令list一下,應該可以看到key已經顯示了
- ssh-add命令的幫助信息:ssh-add -h
- ssh-add -l
- 在網頁上添加SSH Key
- 現在把n.pub里的內容添加到你的網頁上。
- 在Profile Settings-> SSH keys添加。
- 添加信息的地方也會提示你,要公鑰不要私鑰。文件是.pub結尾的,內容以ssh-rsa開頭你的郵箱結尾。
- (開頭和結尾都要帶着,整個文件內容一起貼過來就對了)
- 現在其實已經設置完畢了。測試命令:
- ssh git@<gitlab.a.com>
- 括號里添正確的地址,@前面就是git沒錯,原樣輸入。如果成功的話,會顯示”Welcome to GitLab, 某某某!“這種信息
- 現在可以 git clone 了,后面的地址就是你打開網頁上的Project,在頂端SSH框里顯示的地址:git@<gitlab.domain:project.git>, 可以直接復制。
- git clone git@gitlab.a.com:test/unittest.git
- 現在把n.pub里的內容添加到你的網頁上。
PS:發現這種方法有個缺點,每次退出重新登錄以后都要重新運行一下exec ssh-agent bash && ssh-add ~/.ssh/privatekey ,否則就沒有權限了。
解決方案:本來想偷懶看到.ssh文夾下面沒有config文件就沒有配置。運行了一下發現sshd服務是開機啟動的,現在建一個config文件,
#vim ~/.ssh/config
添加內容:
Host yourservername
IdentityFile ~/.ssh/n
這樣就不需要使用ssh-agent了