Alan Tsai 的學習筆記


學而不思則罔,思而不學則殆,不思不學則“網貸” 記錄軟體開發的點點滴滴 著重於微軟技術、網頁開發、DevOps、C#, Asp .net Mvc、Azure、AI、Chatbot、Docker、Data Science

如何用config管理多個網站的ssh key和如何不用每一組輸入ssh的Pass Phrase

2016-03-07 Monday

在上一篇(何謂ssh,在Windows下如何使用ssh,如何在Windows透過ssh下載和上傳程式到github)介紹完了如何用ssh來和github做push和pull,接下來的問題會是:那如果我有多個站台ssh要連到怎麼辦?舉例來說,假設我的bitbucket也要用ssh聯繫,要怎麼做?

另外一個問題是,每一次用ssh連線都要輸入pass phrase,上篇有介紹了ssh-agent來設定。在這篇將會在延伸ssh-agent的介紹,包括如何新增和刪除key的pass phrase,方便管理多個ssh key的pass phrase。

這篇會假設已經有用上篇的方式建立了一個ssh key給github用,而這篇將會在建立一個ssh key給bitbucket用。

建立另外一個ssh key

在建立bitbucket用的ssh key之前,先來看一下ssh key的檔名的一些命名規則。

通常ssh key的檔名前面的部分會是:id_rsa,而在點的後面則會是這個ssh key的用途。因此,假設今天我要建立的ssh key是給bitbucket用的,我的檔名會變成: id_rsa.bitbucket

有了這個概念之後,可以用下列指令來建立bitbucket要用的ssh key:

ssh-keygen -f id_rsa.bitbucket -C "alan@alantsai.net"

將會產生以下的兩個檔案:

  1. id_rsa.bitbucket
  2. id_rsa.bitbucket.pub

這個時候在%userprofile%\.ssh的下面應該就會有兩組key,一組是id_rsa(github用的),一組是id_rsa.bitbucket(bitbucket用的)。

下一步就是把產生的id_rsa.bitbucket.pub的key加入到bitbucket裏面的允許的ssh key裏面。

config檔案的使用

當ssh key越來越多,如何控制那裡要用那個key就是config在做的設定,接下來將會介紹如何使用config來方便做ssh連線。

Config檔案的概念

有了兩組key之後,我們會需要有一個東西告訴ssh,當我去github我要用id_rsa,當我去bitbucket,我要用id_rsa.bitbucket。而這個檔案,就是所謂的config檔案。

config檔案裡面有個重要概念就是hostname - 使用連線到不同hostname的時候來切換使用的ssh key而config就在設定這件事情。

config檔案的每一個hostname其中幾個重要格式如下:
Host alias
HostNamehostname
IdentityFile ~/.ssh/identity

紅字是每一個可以設定的地方:

  1. alias - 這個和用ssh clone 使用的url有關係,等一下在加深說明
  2. hostname - 這個指的是我們連線過去服務的hostname。以我們例子來說,就會有github.com或者是bitbucket.org
  3. identity - 這個指的就是在這個hostname的情況下要用那個private key

請注意config檔案本身的格式

由於ssh屬於linux類型的工具,因此在檔案格式和line ending上面和windows不同,因此要注意:

  1. 檔案的encoding要用ANSI或者要是utf-8不要有bom
  2. 檔案的Line ending要用UNIX格式
其中目前檔案的encoding和line ending在notepad++可以在右下角看到:

如果自己建立的檔案設定完了還是不成功,那麼建議直接到ssh.exe的global config檔案,路徑(%programfiles%\Git\etc\ssh\ssh_config)去copy過來用,格式和line ending就都okay。

config檔案的建立

上面了解格式之後,config檔案的設定會如下:

# GitHub user
Host github.com
 HostName github.com
 IdentityFile ~/.ssh/id_rsa
 
# Bitbucket
Host bitbucket.org
 HostName bitbucket.org
 IdentityFile ~/.ssh/id_rsa.bitbucket

config的alias作用

在接下去測試之前,這邊先提一個很重要的config概念,就是alias的值。alias可以讓我們的git網址變得更加好記。

預設網址使用alias的網址
git@bitbucket.org:<accountname>/<reponame>.git git@alias:<accountname>/<reponame>.git

所以,alias會對到config裏面的alias,然後用alias的hostname來作為實際連線的host。所以假設今天有個config是:

# Bitbucket
Host personal
 HostName bitbucket.org
 IdentityFile ~/.ssh/id_rsa.bitbucket

那麼,clone的網址可以變成是:git@personal:<accountname>/<reponame>.git

ssh passphrase管理

在之前那篇有介紹了如何透過ssh-add -l的 參數來看那些passphrase有記錄管理,然後可以透過 ssh-add {key path} 來加入某個key的passphrase,在這邊在介紹最後一個參數 ssh-add -D能夠把目前有管理的都刪除。

這邊的刪除指的只是把ssh-agent對key的passphrase的記錄刪除 - 而不是真的把key刪除,因此不用擔心,要重新加回來只要在呼叫ssh-add {key path}就可以。

ssh-add指令總結

指令作用
ssh-add -l列出目前ssh agent有在管控的key passphrase
ssh-add {key path}加入某一個key的passphrase
ssh-add -D把所有目前ssh agent管控的key passphrase都清掉 - 如果要重新加入在用 ssh-add {key path}

測試config檔案的設定

當bitbucket和github使用的ssh key在config設定好了之後,並且key的passphrase都透過ssh-add給ssh-agent管控了之後,會需要測試是否有問題。

這個時候就可以用:

  • ssh -T git@github.com - 測試github的連線
  • ssh -T git@bitbucket.org - 測試bitbucket的連線

結語

希望透過上篇和這篇的ssh介紹,能夠讓沒有用過ssh的Windows使用者在使用git和repository溝通的時候花的的時間更少,讓大家可以更專注在程式開發上面。

其他資料

  1. 何謂ssh,在Windows下如何使用ssh,如何在Windows透過ssh下載和上傳程式到github
  2. Configure multiple SSH identities for GitBash, Mac OSX, & Linux - 介紹config裏面的多個alias設定
  3. Set up SSH for Git - 介紹使用ssh

如果文章對您有幫助,就請我喝杯飲料吧
街口支付QR Code
街口支付QR Code
台灣 Pay QR Code
台灣 Pay QR Code
Line Pay 一卡通 QR Code
Line Pay 一卡通 QR Code
街口支付QR Code
支付寶QR Code
街口支付QR Code
微信支付QR Code
2016-03-07 Monday
comments powered by Disqus