$ 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)境。
使用場景?
- linux 無密login
- 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ī)器。
*下面是無密登錄的完整過程:
- 客戶機(jī)使用ssh-keygen生成密鑰對(私密id_rsa、公密id_rsa.pub)。
- 復(fù)制公密id_rsa.pub的內(nèi)容
$ pbcopy < ~/.ssh/id_rsa.pub
- 使用ssh登錄到遠(yuǎn)程機(jī)器(這次需要密碼)
$ ssh root@host //root:帳號 , host :服務(wù)器IP地址
- 把剪切版的內(nèi)容粘貼到~/.ssh/authorized_keys中,退出登錄
$ exit
- ,基礎(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文件中,那么下次登錄就不會再詢問了。
- 這時候服務(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干嘛用:
github中,帳號設(shè)置里面有一欄是ssh key設(shè)置,我們可以在里面添加公鑰(就好像上面說的在服務(wù)器中添加剪切板的公鑰信息一樣),添加完公鑰以后,擁有該公鑰對應(yīng)的私鑰的機(jī)器就可以隨意push代碼。
要進(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的原理,走到哪里道理還是一樣。謝謝觀看!
請作者喝茶:
