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 中直接操作——










