天天看點

多SSH KEY切換部署同步代碼需求場景切換SHH KEYPUSH 代碼

需求場景

大部分開發者個人的代碼基本都同步在代碼托管平台管理,業内著名的有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 代碼的時候回有如下錯誤提示:

多SSH KEY切換部署同步代碼需求場景切換SHH KEYPUSH 代碼
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           

原文首發:《

虛懷若谷