github 使用 ssh 方式認證登入。
官方文件:http://help.github.com/ssh-key-passphrases/
之所以不使用普通的密碼驗證登入,原因在於:密碼不夠安全。如果你使用簡單的密碼,比如“1234”,非常容易被猜到或者被暴力破解;如果你使用複雜的密碼,為了避免自己也忘記,又可能會記在某個地方,如果被人發現,就糟了。兩種方式都很不妥。所以 github 採用 ssh 金鑰方案。
但如果只使用 ssh 金鑰而不使用 passphrase(口令或密碼),那跟使用複雜密碼然後記下來沒啥區別。比如你將ssh金鑰記在電腦某處,如果其他人獲取了這個檔案,那就沒有安全可言。解決辦法是:再增加一個 passphrase。
所以,整個認證過程是:
a)先生成一個 ssh key,在github和本地機器配置;
b)然後在登入的時候,再輸入 passphrase 登入(當然,我們可以通過指令碼配置,避免每次重複輸入 passphrase )。
第一部分:配置ssh
先進入 cygwin 命令列。為了在你的電腦和github之間建立安全連線,需要SSH keys,所以你需要
1)先檢測是否有這個key,請點選開始選單中的 Git Bash,輸入如下命令
$ cd ~/.ssh
2)系統應該反饋“系統找不到指定檔案”,那麼,我們需要生成一個新的key,輸入如下程式碼
$ ssh-keygen -t rsa -C “your_email@youremail.com”
——其中的email請填寫你註冊時候的email
系統開始生成ssh公鑰和私鑰,然後會問你儲存的目錄,請直接回車即可(直接回車意味著在當前目錄下的.ssh目錄儲存)。
3)輸入一個密碼(passphrase),請至少填寫一個4位數,這個密碼是你連線到github所用。輸入之後,會生成id_rsa(私鑰) 和 id_rsa.pub(公鑰) 檔案,如下圖所示:
訪問github網站, “Account Settings” > Click “SSH Public Keys” > Click “Add another public key”
用文字編輯器開啟上圖中第二個檔案 id_rsa.pub,裡面的內容就是SSH key,請複製它,貼上入key裡面,記得不要有任何多餘的空格和換行。然後點選“Add key”提交。(Title欄可以不填寫)
現在,你可以測試通過SSH連線到github了。請開啟Git Bash,輸入如下程式碼——
ssh -T git@github.com
如果提示“can`t be established.”什麼東西(如下程式碼),請不要管,直接按yes
The authenticity of host `github.com (207.97.227.239)` can`t be established.
RSA key fingerprint is 16:27:ac:a5:76:28:2d:36:63:1b:56:4d:eb:df:a6:48.
Are you sure you want to continue connecting (yes/no)?
然後提示輸入密碼(passphrase)。
如果看到 You`ve successfully authenticated, but GitHub does not provide shell access 資訊,就表示連線成功。
第二部分:避免重複輸入 passphrase
通過上面的流程,已經正確配置了 ssh ,但你每次使用的時候,總是很不爽,比如在命令列下,每次 pull 或 push,都要重複輸入 passphrase。你會想:我明明已經使用 ssh key 了,為什麼還要我輸入密碼?
分兩種情況討論——
一、命令列下避免重複輸入
在這種情況下,有一個工具可以幫你避免重複輸入 passphrase ,這個工具叫 ssh-agent ,它可以幫你安全的儲存passphrase,不用重複輸入。
具體使用方法是通過指令碼預設——
1)開啟使用者主目錄下(比如c/cygwin/home/Administrator)的 .bashrc 檔案,將如下指令碼內容新增進去:
SSH_ENV=“$HOME/.ssh/environment”
# start the ssh-agent
function start_agent {
echo “Initializing new SSH agent…”
# spawn ssh-agent
ssh-agent | sed `s/^echo/#echo/` > “$SSH_ENV”
echo succeeded
chmod 600 “$SSH_ENV”
. “$SSH_ENV” > /dev/null
ssh-add
}
# test for identities
function test_identities {
# test whether standard identities have been added to the agent already
ssh-add -l | grep “The agent has no identities” > /dev/null
if [ $? -eq 0 ]; then
ssh-add
# $SSH_AUTH_SOCK broken so we start a new proper agent
if [ $? -eq 2 ];then
start_agent
fi
fi
}
# check for running ssh-agent with proper $SSH_AGENT_PID
if [ -n “$SSH_AGENT_PID” ]; then
ps -ef | grep “$SSH_AGENT_PID” | grep ssh-agent > /dev/null
if [ $? -eq 0 ]; then
test_identities
fi
# if $SSH_AGENT_PID is not properly set, we might be able to load one from
# $SSH_ENV
else
if [ -f “$SSH_ENV” ]; then
. “$SSH_ENV” > /dev/null
fi
ps -ef | grep “$SSH_AGENT_PID” | grep -v grep | grep ssh-agent > /dev/null
if [ $? -eq 0 ]; then
test_identities
else
start_agent
fi
fi
2)然後開啟 cygwin 的命令列,第一次開啟,它會要求你輸入 passphrase ,輸入之後,再執行相應的遠端操作,就不會要求重複輸入 passphrase 了(當然重啟電腦會要求再次輸入)。
二、git extentions 中避免重複輸入
【啟用 PuTTY】
1)開啟 PuTTY,方法:“遠端”->PuTTY->“生成或者匯入key”
2)匯入你前面的 ssh key,點選下面的“Load”按鈕,匯入前面生成的 id_rsa 檔案
3)這時它要求你輸入 passphrase
4)輸入成功,然後你需要點選下圖的 Save private key,將私鑰儲存,你可以將它儲存在 id_rsa(ssh私鑰) 同一個目錄。PuTTY 生成的私鑰檔案是 .ppk 字尾名。
【在 git extensions 中使用 PuTTY】
1)開啟 git etensions,在 “遠端”選單中,點選“管理遠端檔案庫”
2)點選右下部分的“私鑰檔案”後面的“瀏覽”,將前面 PuTTY 中儲存的 .ppk 字尾的私鑰檔案載入進來。
然後點選“載入SSH金鑰”,輸入 passphrase,然後點選“測試連線”
此時 PuTTY/plink.exe 開始啟動,只要這個開著,就不用重複輸入 passphrase
3)現在可以順利和遠端庫操作,比如下面的“拉取”
或者在 vs 中直接操作——
==============================================================================