ssh
SSH--Secure SHell(安全外殼協(xié)議)
SSH是建立在應(yīng)用層和傳輸層基礎(chǔ)上钧唐,默認(rèn)端口是22逾柿,為遠(yuǎn)程登錄會話和其他網(wǎng)絡(luò)服務(wù)提供安全性的協(xié)議宅此。SSH是替代Telnet(默認(rèn)端口是23)和其他遠(yuǎn)程控制臺管理應(yīng)用程序的行業(yè)標(biāo)準(zhǔn)父腕。
SSH服務(wù)最早是由芬蘭的一家公司開發(fā)的UNIX系統(tǒng)上的一個程序,后來迅速擴(kuò)展到其他操作平臺萧诫,現(xiàn)在已經(jīng)發(fā)展到SSH2版本。SSH只是一種協(xié)議哑诊,存在多種實(shí)現(xiàn)镀裤,既有商業(yè)實(shí)現(xiàn)缴饭,也有開源實(shí)現(xiàn)。由于版權(quán)和加密算法等因素的影響担猛,很多人開始轉(zhuǎn)用開源免費(fèi)的openSSH(Linux/Mac OS X標(biāo)配)傅联。
SSH提供基于密鑰的認(rèn)證機(jī)制纺且,你必須為自己創(chuàng)建一對非對稱密鑰(public/private key pair)稍浆,并把公鑰放到需要訪問的服務(wù)器上進(jìn)行授權(quán)。SSH1使用RSA(RonRivest嫁艇、AdiShamir弦撩、LeonardAdleman)加密密鑰益楼,SSH2使用DSA(Digital Signature Algorithm,數(shù)字簽名算法)密鑰保護(hù)連接和認(rèn)證悯周。RSA和DSA這兩種加密算法都是非對稱加密算法陪竿。
所謂“SSH公鑰認(rèn)證免密碼登錄認(rèn)證機(jī)制”,原理如下:
- SSH客戶端提前將SSH公鑰儲存在遠(yuǎn)程SSH服務(wù)器上锐墙,然后SSH客戶端攜帶公鑰向遠(yuǎn)程SSH服務(wù)器(known_hosts)發(fā)起登錄請求长酗。
- 遠(yuǎn)程SSH服務(wù)器收到該請求之后,先在該服務(wù)器上的authorized_keys尋找你上傳授權(quán)過的公鑰刻盐,然后把它和你發(fā)送過來的公鑰進(jìn)行比較。
- 如果兩個公鑰一致(Key Exchange Success)馒疹,遠(yuǎn)程SSH服務(wù)器會向用戶發(fā)送一段使用SSH公鑰加密過的隨機(jī)字符串進(jìn)行身份質(zhì)詢(Challenge)。
- SSH客戶端用自己的私鑰解密后再發(fā)回給遠(yuǎn)程SSH服務(wù)器生均,遠(yuǎn)程SSH服務(wù)器對比回包中解密出來的隨機(jī)字符串是否一致马胧。如果一致衔峰,則證明用戶(公鑰或身份)是可信的,直接允許登錄shell,不再要求密碼寇钉。
版本
Mac OS X已經(jīng)集成了open-ssh
open-ssh的版本:
ssh -V
生成
使用以下命令生成
NikoXus-iMac:~ NikoXu$ssh-keygen -t rsa -C "${YourEmail}"
# "-t rsa"表示使用密鑰的加密類型,還可以為dsa评抚;-C設(shè)置注釋文字,比如你的郵箱“YourEmail”邢笙,不一定要是github注冊郵箱鸣剪,只作為一種標(biāo)示
Enter file in which to save the key (/Users/faner/.ssh/id_rsa): # 直接回車即選擇默認(rèn)路徑
Enter passphrase (empty for no passphrase):
# 輸入密鑰文件授權(quán)密碼,用于加密本地ssh-key债鸡,一般直接留空不加密
Enter same passphrase again:
# 確認(rèn)密鑰文件授權(quán)密碼
Your identification has been saved in /Users/faner/.ssh/id_rsa.
# 生成的ssh私鑰路徑
Your public key has been saved in /Users/faner/.ssh/id_rsa.pub.
#生成的ssh公鑰路徑
獲取生成的ssh-key pub
從上一步驟設(shè)置的ssh文件路徑下找到id_rsa.pub文件
NikoXus-iMac:~ NikoXu$ cd ~/.ssh/
NikoXus-iMac:.ssh NikoXu$ cat id_rsa.pub
復(fù)制生成的ssh-key pub,添加到github或bitbucket等網(wǎng)站相應(yīng)的接口告唆。
在bitbucket或github上添加ssh-key
以bitbucket為例
登入bitbucket,在bitbucket setting里找到 SSH 的設(shè)置模她。
測試ssh連接
以bitbucket為例
NikoXus-iMac:.ssh NikoXu$ ssh git@bitbucket.com
輸入后有如下提示
Are you sure you want to continue connecting (yes/no)? yes
#接受認(rèn)可遠(yuǎn)程主機(jī)的公鑰(可以核對官方給出的公鑰指紋)
Warning: Permanently added 'bitbucket.com,104.192.143.8' (RSA) to the list of known hosts.
#bitbucket.com服務(wù)器主機(jī)已經(jīng)得到認(rèn)可被添加到~/.ssh/known_hosts中侈净,可以執(zhí)行cat known_hosts查看該文件
git 倉庫增加ssh 協(xié)議支持
進(jìn)入你的git倉庫畜侦,在你的倉庫添加ssh支持
NikoXus-iMac: NikoXu$ git remote add bitbucket git@bitbucket.org:Xniko/[your respositories].git
亦可用以下命令替換https協(xié)議
NikoXus-iMac: NikoXu$ git remote set-url bitbucket git@bitbucket.org:Xniko/[你的倉庫].git
查看git remote
NikoXus-iMac: NikoXu$ git remote -v
至此旋膳,可以在shell里使用ssh免密碼在github\bitbucket進(jìn)行相應(yīng)操作验懊。
當(dāng)然ssh可以實(shí)現(xiàn)的不僅僅是讓git 免密訪問遠(yuǎn)程服務(wù)器鲁森。
(完)