需求場景
大部分開發者個人的代碼基本都同步在代碼托管平台管理,業内著名的有github、gitlab等,國内也有開源中國的碼雲(gitee)平台、coding.net平台。有時候,想玩一些有趣的東西,比如用流行的 CMS 搭建一套自己的部落格系統(比如 Wordpress),而這些 CMS 都支援線上更新功能、打更新檔 fix bug,增加一些合适的插件等。這樣我們可以直接在管理背景選擇更新系統,而無需先下載下傳到本地,再通過FTP等方式上傳到伺服器重新部署。
我們喜歡用一些免費的雲服務,但都有時長限制,說不定哪天就把我們的服務幹掉了,畢竟免費的,服務穩定性不能保障。是以,這些雲伺服器隻能運作代碼,卻不能做代碼托管。于是,我們每次線上更新完功能之後,需要把代碼備份到代碼托管平台。
一般情況下,我們會單獨生成一個 ssh key 公鑰用于備份資料,而不是和其他公鑰混合使用,避免因為因為某些操作不安全,造成代碼丢失。當然你也可以選擇一個其他賬戶操作也是可以的,但如果選擇其他賬戶了,也就沒有這篇文章的存在了。還是回到多個 ssh key 的問題上,預設情況下,RSA 算法的
ssh
私鑰檔案名為
id_rsa
,我們可以通過
ssh-keygen
生成公鑰的時候可以指定其名稱,假如指定的檔案名稱為:
id_gitee_rsa
。
我們在目前使用者目錄的 .ssh 目錄下面可以執行 ls 指令可以檢視:
ls -la ~/.ssh/
bash 視窗顯示如下:
drwx------ 2 www www 4096 May 29 14:51 .
drwxr-xr-x 5 www www 4096 Jun 28 18:53 ..
-rw------- 1 www www 1766 May 29 14:51 id_gitee_rsa
-rw-r--r-- 1 www www 398 May 29 14:51 id_gitee_rsa.pub
-rw------- 1 www www 1679 Oct 26 2018 id_rsa
-rw-r--r-- 1 www www 399 Oct 26 2018 id_rsa.pub
-rw-r--r-- 1 www www 666 Nov 14 14:39 known_hosts
切換SHH KEY
SSH 預設隻會讀取目前使用者目錄下
~/.ssh/id_rsa
的資料,如果我們不切換 ssh key,假如我們在 github 或者 gitee 配置的是
id_gitee_rsa
的公鑰,當 push 代碼的時候回有如下錯誤提示:

Access deined: DeployKey does not support push code
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
是以,為了讓 ssh 能識别其他私鑰,需要将其添加到 ssh agent:
ssh-add ~/.ssh/id_gitee_rsa
如果
ssh-add
過程報錯:
Could not open a connection to your authentication agent.
。則需要先執行
bash
代理。
ssh-agent bash
執行上面的代理配置指令後,再次執行
ssh-add ~/.ssh/id_gitee_rsa
指令将其添加到 ssh 代理中。需要注意的是,如果在生成私鑰的過程中輸入了密碼,那麼該操作就需要再次輸入密碼授權。
Enter passphrase for /home/www/.ssh/id_gitee_rsa:
如果出現上面的資訊,則需要輸入密碼。輸入密碼無誤,則切換成功後,會顯示如下資訊:
dentity added: /home/www/.ssh/id_gitee_rsa (/home/www/.ssh/id_gitee_rsa)
PUSH 代碼
當 ssh key 切換成功之後,我們再次推送代碼到我們的代碼倉庫,發現已經沒有原來的錯誤了:
$ git push
Counting objects: 4098, done.
Compressing objects: 100% (3944/3944), done.
Writing objects: 100% (4098/4098), 40.11 MiB | 132.00 KiB/s, done.
Total 4098 (delta 941), reused 0 (delta 0)
remote: Resolving deltas: 100% (941/941), completed with 727 local objects.
remote: Powered by GITEE.COM [GNK-3.8]
To [email protected]:joyven/xxx.git
6893b33..85b567d4 master -> master
原文首發:《
虛懷若谷》