如何用ssh key在網(wǎng)絡(luò)上暢通無阻

$ whoami
name:        kelvin
email:       kelvv@outlook.com
homepage:    www.kelvv.com
github:      https://github.com/kelvv

Secure Shell(縮寫為SSH),由IETF的網(wǎng)絡(luò)工作小組(Network Working Group)所制定;SSH為一項創(chuàng)建在應(yīng)用層傳輸層基礎(chǔ)上的安全協(xié)議,為計算機(jī)上的Shell(殼層)提供安全的傳輸和使用環(huán)境。

使用場景?

  1. linux 無密login
  2. git 無密push

ssh有啥?

ssh中,有兩個鑰匙:公鑰、私鑰 ,公鑰主要是用于對一些敏感信息進(jìn)行加密 , 私鑰是用于對解密 。
ssh的文件都存在于機(jī)器的~/.ssh中。

  • 客戶機(jī)端:id_rsa(私鑰) 、 id_rsa.pub(公鑰) 、 known_hosts(已知遠(yuǎn)程主機(jī))
  • 服務(wù)器端:authorized_keys(驗證過的公鑰列表) 、 sshd_config(ssh配置文件)

linux 無密login

linux的遠(yuǎn)程登錄默認(rèn)是需要密碼的,但是我們可以通過ssh通道,進(jìn)行無密登錄,也就是說每次登錄只需要 ssh username@host 就能成功登錄遠(yuǎn)程機(jī)器。

*下面是無密登錄的完整過程:

  1. 客戶機(jī)使用ssh-keygen生成密鑰對(私密id_rsa、公密id_rsa.pub)。
  2. 復(fù)制公密id_rsa.pub的內(nèi)容
$ pbcopy < ~/.ssh/id_rsa.pub
  1. 使用ssh登錄到遠(yuǎn)程機(jī)器(這次需要密碼)
$ ssh root@host  //root:帳號  , host :服務(wù)器IP地址
  1. 把剪切版的內(nèi)容粘貼到~/.ssh/authorized_keys中,退出登錄
$ exit
  1. ,基礎(chǔ)已經(jīng)搭建完了,使用ssh無密登錄(不需要密碼)

> 如果發(fā)現(xiàn)無法自動登錄,請修改

$ vi /etc/ssh/sshd_config
RSAAuthentication yes  
PubkeyAuthentication yes  
AuthorizedKeysFile .ssh/authorized_keys
把以上的最前面的#去掉 。
$ service ssh restart
$ exit
重新登錄


$ ssh root@192.168.1.1
The authenticity of host '192.168.1.1 (192.168.1.1)' can't be established.
ECDSA key fingerprint is SHA256:8bZUeFxyoxL9oYhc5aAZjgSZ5CT1oGYEYoehN/OLEYY.
Are you sure you want to continue connecting (yes/no)? 

因為這是第一次登錄,ssh無法判斷遠(yuǎn)程的服務(wù)端是否是正確的,在這里如果有人中間截獲了你的登錄請求,并且模擬ssh服務(wù)端的話,你的密碼就會泄漏(中間人攻擊),所以ssh會詢問你:遠(yuǎn)程服務(wù)端的指紋是:xxxx,是不是確定登錄。

選擇yes,ssh會把該服務(wù)端的信息存到本地的~/.ssh/known_hosts文件中,那么下次登錄就不會再詢問了。

  1. 這時候服務(wù)端會使用公鑰對A字符串加密,然后傳輸?shù)娇蛻舳耍蛻舳耸褂盟借€進(jìn)行解密,得到的A字符串,然后對A字符串進(jìn)行md5加密,服務(wù)端判斷傳回來的字符串是否正確,如果正確,直接登錄。

git 無密push

使用git的版本管理工具有很多,例如github、bitbucket、gitcafe等,我們在使用這些工具的時候避免不了上傳(push)代碼,默認(rèn)來說每次push都需要附帶上賬號密碼。這些git工具都會有ssh功能,可以通過配置鑰匙,在機(jī)器和遠(yuǎn)程git確定好聯(lián)系以后,每次提交push的時候不需要做任何驗證。

git的push挺有意思的,有機(jī)會開一篇如果在多git帳號、跨git版本控制工具中來去自如,自動識別。

*以github為例子說說ssh干嘛用:

  1. github中,帳號設(shè)置里面有一欄是ssh key設(shè)置,我們可以在里面添加公鑰(就好像上面說的在服務(wù)器中添加剪切板的公鑰信息一樣),添加完公鑰以后,擁有該公鑰對應(yīng)的私鑰的機(jī)器就可以隨意push代碼。

  2. 要進(jìn)行g(shù)it操作,可以下載git命令行工具,也可以下載一些第三方的git管理軟件,可以設(shè)置全局郵箱、全局昵稱。也可以設(shè)置針對某一個項目的郵箱和昵稱,這里要注意:添不添加郵箱、昵稱無所謂,如果已經(jīng)設(shè)置了ssh,就可以隨便push

  • 如果設(shè)置了郵箱昵稱、在github上面現(xiàn)實(shí)的就是關(guān)于這個郵箱的帳號的信息,
  • 如果沒有設(shè)置,提交是成功的,在github上面現(xiàn)實(shí)的提交人就是 郵箱:你的機(jī)器名稱 昵稱:你的機(jī)器的用戶名稱。

總結(jié)

ssh對于身份驗證應(yīng)用于很多領(lǐng)域,所以理解好ssh的原理,走到哪里道理還是一樣。謝謝觀看!

請作者喝茶:


圖片發(fā)自簡書App
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容