使用public key來作SSH authentication

public key authentication(公鑰認證)是對經過敲用戶名、密碼方式登陸服務器的一種替代辦法。這種方法更加安全更具備適應性,可是更難以配置。html

傳統的密碼認證方式中,你經過證實你你知道正確的密碼來證實你是你。證實你知道密碼的惟一方式是你告訴服務器密碼是什麼。這意味着若是服務器被黑掉,或者欺騙,那麼一個黑客攻擊者就能學習到你的密碼。git

Public key authentication(公鑰認證)解決了這個問題。你產生一個密鑰對,該密鑰對由一個public key(公鑰)(每一個人均可以知道的)和一個私鑰(你負責該私鑰的安全,不讓任何人知道)。私鑰能夠用於產生簽名(signatures)。一個由你的私鑰派生出來的簽名不能被任何不知道那個私鑰的人所僞造,但同時任何知道你的公鑰的人都能驗證一個簽名是否真正是由你的那個公鑰、私鑰所配對生成的簽名!github

你能夠在本身的機器上建立上述公鑰私鑰key pair,隨後你將公鑰copy到服務器上。而後服務器詢問你證實你是你時,PuTTY可使用你的私鑰產生一個簽名並傳給服務器。服務器就能夠驗證那個簽名的真僞了(由於服務器有公鑰),而且決定是否容許你登錄。如今若是服務器自己被黑掉或者被欺騙,那麼攻擊者沒法得到你的私鑰或者密碼,他們僅僅可以得到一個簽名而已。而簽名自己是不能被重用的,因此他們什麼也沒法得到(緣由是簽名都是在祕鑰交換過程當中動態生成的)。算法

在這裏有一個問題:若是你的私鑰在你的本機明碼保存的話,那麼任何人只要可以訪問到那個私鑰文件那麼他就可以冒充你來建立簽名。因此他們所以將可以冒充你的身份登陸到系統中去。由於這個緣由,那麼你的私鑰一般在本地存儲時是加密過的,這個私鑰的加密就使用一個你設定的passphrase來加密的。爲了建立一個簽名,PuTTY必需要首先解密這個密碼私鑰,你必須經過輸入正確的passphrase才能保證PuTTY可以正確解密私鑰,進而建立簽名。windows

上述過程使得public key authentication方式和單純密碼認證方式顯得有些不是很方便:每次你登錄服務器,替代輸入一個簡單密碼的方式,而必須輸入一個很長的passphrase。一個解決方案是你使用一個authentication agent,該認證代理就是一個保存擁有已經被解密過的私鑰而且據此在被請求時建立簽名。Putty的認證代理被稱爲Pageant.當你開始一個windows session,你啓動Pageant而且加載你的私有祕鑰(須要輸入一次passphrase)。其餘的session,你就能夠啓動Putty任意次數,而因爲Pageant會在不需你任何介入的狀況下自動建立你的簽名,而使得公鑰認證使用更加方便一些。當你關閉了windows session, pageant shuts down,而永遠不會將被解密過的私鑰文件放到磁盤(僅僅存在於內存中)。不少人認爲這是一個安全性和便利性的很好折中。安全

有多種公鑰算法,最經常使用的是RSA,但也有其餘的,好比DSA(DSS),美國聯邦數字簽名標準等。bash

在github使用中,若是你須要git push操做的話,頗有可能就會出現:服務器

GitHub: Permission denied (publickey).session

的錯誤,緣由就是你沒有在github服務器上建立公鑰,方法參考:ssh

https://help.github.com/articles/generating-ssh-keys/

在上述github的命令執行過程當中,

若執行ssh-add /path/to/xxx.pem是出現這個錯誤:Could not open a connection to your authentication agent,則先執行以下命令便可:

  ssh-agent bash

爲了方便,將上述建立github公鑰的過程羅列一下:

  • Check for SSH keys

 

ls -al ~/.ssh
# Lists the files in your .ssh directory, if they exist

id_dsa.pub
id_ecdsa.pub
id_ed25519.pub
id_rsa.pub

 

  • Generate a new SSH key

 

ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
# Creates a new ssh key, using the provided email as a label
# Generating public/private rsa key pair.
Enter file in which to save the key (/Users/you/.ssh/id_rsa): [Press enter]
Enter passphrase (empty for no passphrase): [Type a passphrase]
# Enter same passphrase again: [Type passphrase again]
Your identification has been saved in /Users/you/.ssh/id_rsa.
# Your public key has been saved in /Users/you/.ssh/id_rsa.pub.
# The key fingerprint is:
# 01:0f:f4:3b:ca:85:d6:17:a1:7d:f0:68:9d:f0:a2:db your_email@example.com

 

  • Add your key to the ssh-agent

# start the ssh-agent in the background
ssh-agent -s
# Agent pid 59566
# start the ssh-agent in the background for windows
eval $(ssh-agent -s)
# Agent pid 59566
#
ssh-add ~/.ssh/id_rsa
 

 

  •  Add your SSH key to your account

To configure your GitHub account to use your SSH key:

Copy the SSH key to your clipboard. If your key is named id_dsa.pubid_ecdsa.pub orid_ed25519.pub, then change the filename below from id_rsa.pub to the one that matches your key:

clip < ~/.ssh/id_rsa.pub
# Copies the contents of the id_rsa.pub file to your clipboard

http://the.earth.li/~sgtatham/putty/0.55/htmldoc/Chapter8.html

相關文章
相關標籤/搜索