最近電腦爆了,懷疑應該是副廠的線造成的問題,

看樣子東西真的不能買便宜的(?

剛好也想說順便重新設定一些環境上的東西,只是這次要認真的寫筆記了…

之前的筆記都非常的零碎,重看的時候才會覺得好像少了很多東西。

身為一個軟體工程師,寫一些坑人的筆記也是理所當然的事。

正文開始


ssh到GitHub的時候,使用私鑰進行驗證

具體步驟大概分為

  1. 產生rsa的公私鑰
  2. 設定ssh的config (optional)
  3. 登入Github並且加入剛剛產生的公鑰 (手動)
  4. 測試連線

產生rsa的公私鑰

ssh-keygen

過程中會問兩個問題

  1. 產生的公私鑰要放的位置
  2. 設定密碼 ( passphrase )

公私鑰的位置如果直接按Return的話,就會存在預設的位置。

預設位置為:/Users/username/.ssh/id_rsa

這邊的username請自行修改成你的帳號,不是真的路徑喔…

不然也可以自行輸入要存放的位置,例如:

/Users/username/.ssh/rsa-for-github

不過這邊要留意一點:不能用tab自動補全,在輸入的時候要注意大小寫跟拼字

密碼的部分應該是為了多人共用電腦而設計的,避免使用別人的私鑰去亂搞。

如果輸入密碼的話就每次使用ssh連接時都需要打密碼。

這部分我就沒特別研究了,有需要的請自行研究。

完成以後會產生一組公私鑰檔案,例如

rsa-for-github.pub and rsa-for-github

沒有.pub的檔案就是私鑰,請好好保管。


設定ssh的config

如果在第一步中使用預設位置的話,這一步就可以跳過,如果還有興趣就隨便看看吧

用不同鑰匙的好處,就跟你不同網站用不同密碼是一樣的概念,

減少私鑰遺失後全部都被攻破的風險。

缺點當然是要自行管理這些檔案,管理的方法就是用config來告訴ssh要用哪一個私鑰來驗證。

因為預設的ssh會去讀id_rsa作為私鑰去驗證,所以如果不用config讓ssh知道要用哪一把鑰匙去做驗證,不管怎麼都入都是失敗的喔。

基本上我常用的大概就幾個

Host         # 用來連線的 alias 名稱
HostName     # host domain 或 ip
Port         # host 的 SSH port
IdentityFile # 私鑰位置
User         # 登入帳號

舉幾個例子:

# Github
Host github.com
HostName github.com
IdentityFile ~/.ssh/rsa_for_github
User git

# Raspberry
# 因為我有買樹莓派回來玩,如果不用這樣登入的話,每次都是要打帳號密碼,很煩。
Host raspbian
HostName 192.168.1.123
IdentityFile ~/.ssh/rsa_for_rpi
User pi

登入Github並且加入剛剛產生的公鑰

可以先用cat指令來顯示公鑰內容,然後再把公鑰貼到Github的SSH Key欄位中

image

image

image

這邊比較簡單就放三張圖自己研究一下就夠了。

這邊補充一下,如果要用命令將公鑰加入到目標server中的話(例如樹莓派)可以用以下的命令來執行。

不確定能不能用命令把公鑰加入到Github中,這部分沒特別研究。

# 語法:
ssh-copy-id user@host

# 如果不是用預設的名稱,就要加入參數 i,用來指定IdentityFile
ssh-copy-id -i ~/.ssh/rsa-for-rpi.pub user@host

# 範例
ssh-copy-id pi@192.168.1.123
ssh-copy-id -i ~/.ssh/rsa-for-rpi.pub pi@192.168.1.123

測試連線

根據Github的線上文件,只要透過下面這行命令即可

ssh -T git@github.com

只要最後出現的是下面這樣就算成功了,至於沒出現的話,就看看有哪些地方做錯了吧。

> Hi username! You've successfully authenticated, but GitHub does not
> provide shell access.

參考網頁

https://nerderati.com/2011/03/17/simplify-your-life-with-an-ssh-config-file/

https://xenby.com/b/220-教學-產生ssh-key並且透過key進行免密碼登入

https://help.github.com/en/github/authenticating-to-github/testing-your-ssh-connection