$ whoami
name: kelvin
email: kelvv@outlook.com
homepage: www.kelvv.com
github: https://github.com/kelvv
Secure Shell(縮寫(xiě)為SSH),由IETF的網(wǎng)絡(luò)工作小組(Network Working Group)所制定幅聘;SSH為一項(xiàng)創(chuàng)建在應(yīng)用層和傳輸層基礎(chǔ)上的安全協(xié)議,為計(jì)算機(jī)上的Shell(殼層)提供安全的傳輸和使用環(huán)境。
使用場(chǎng)景肋杖?
- linux 無(wú)密login
- git 無(wú)密push
ssh有啥?
ssh中挖函,有兩個(gè)鑰匙:公鑰状植、私鑰 ,公鑰主要是用于對(duì)一些敏感信息進(jìn)行加密 , 私鑰是用于對(duì)解密 怨喘。
ssh的文件都存在于機(jī)器的~/.ssh中津畸。
- 客戶(hù)機(jī)端:id_rsa(私鑰) 、 id_rsa.pub(公鑰) 必怜、 known_hosts(已知遠(yuǎn)程主機(jī))
- 服務(wù)器端:authorized_keys(驗(yàn)證過(guò)的公鑰列表) 肉拓、 sshd_config(ssh配置文件)
linux 無(wú)密login
linux的遠(yuǎn)程登錄默認(rèn)是需要密碼的,但是我們可以通過(guò)ssh通道棚赔,進(jìn)行無(wú)密登錄帝簇,也就是說(shuō)每次登錄只需要 ssh username@host 就能成功登錄遠(yuǎn)程機(jī)器徘郭。
*下面是無(wú)密登錄的完整過(guò)程:
- 客戶(hù)機(jī)使用ssh-keygen生成密鑰對(duì)(私密id_rsa、公密id_rsa.pub)丧肴。
- 復(fù)制公密id_rsa.pub的內(nèi)容
$ pbcopy < ~/.ssh/id_rsa.pub
- 使用ssh登錄到遠(yuǎn)程機(jī)器(這次需要密碼)
$ ssh root@host //root:帳號(hào) 残揉, host :服務(wù)器IP地址
- 把剪切版的內(nèi)容粘貼到~/.ssh/authorized_keys中,退出登錄
$ exit
- 芋浮,基礎(chǔ)已經(jīng)搭建完了抱环,使用ssh無(wú)密登錄(不需要密碼)
> 如果發(fā)現(xiàn)無(wú)法自動(dòng)登錄,請(qǐng)修改
$ 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)?
因?yàn)檫@是第一次登錄镇草,ssh無(wú)法判斷遠(yuǎn)程的服務(wù)端是否是正確的,在這里如果有人中間截獲了你的登錄請(qǐng)求瘤旨,并且模擬ssh服務(wù)端的話(huà)梯啤,你的密碼就會(huì)泄漏(中間人攻擊),所以ssh會(huì)詢(xún)問(wèn)你:遠(yuǎn)程服務(wù)端的指紋是:xxxx存哲,是不是確定登錄因宇。
選擇yes,ssh會(huì)把該服務(wù)端的信息存到本地的~/.ssh/known_hosts文件中祟偷,那么下次登錄就不會(huì)再詢(xún)問(wèn)了察滑。
- 這時(shí)候服務(wù)端會(huì)使用公鑰對(duì)A字符串加密,然后傳輸?shù)娇蛻?hù)端修肠,客戶(hù)端使用私鑰進(jìn)行解密贺辰,得到的A字符串,然后對(duì)A字符串進(jìn)行md5加密嵌施,服務(wù)端判斷傳回來(lái)的字符串是否正確饲化,如果正確,直接登錄艰管。
git 無(wú)密push
使用git的版本管理工具有很多滓侍,例如github、bitbucket牲芋、gitcafe等撩笆,我們?cè)谑褂眠@些工具的時(shí)候避免不了上傳(push)代碼,默認(rèn)來(lái)說(shuō)每次push都需要附帶上賬號(hào)密碼缸浦。這些git工具都會(huì)有ssh功能夕冲,可以通過(guò)配置鑰匙,在機(jī)器和遠(yuǎn)程git確定好聯(lián)系以后裂逐,每次提交push的時(shí)候不需要做任何驗(yàn)證歹鱼。
git的push挺有意思的,有機(jī)會(huì)開(kāi)一篇如果在多git帳號(hào)卜高、跨git版本控制工具中來(lái)去自如弥姻,自動(dòng)識(shí)別南片。
*以github為例子說(shuō)說(shuō)ssh干嘛用:
github中,帳號(hào)設(shè)置里面有一欄是ssh key設(shè)置庭敦,我們可以在里面添加公鑰(就好像上面說(shuō)的在服務(wù)器中添加剪切板的公鑰信息一樣)疼进,添加完公鑰以后,擁有該公鑰對(duì)應(yīng)的私鑰的機(jī)器就可以隨意push代碼秧廉。
要進(jìn)行g(shù)it操作伞广,可以下載git命令行工具,也可以下載一些第三方的git管理軟件疼电,可以設(shè)置全局郵箱嚼锄、全局昵稱(chēng)。也可以設(shè)置針對(duì)某一個(gè)項(xiàng)目的郵箱和昵稱(chēng)蔽豺,這里要注意:添不添加郵箱区丑、昵稱(chēng)無(wú)所謂,如果已經(jīng)設(shè)置了ssh茫虽,就可以隨便push
- 如果設(shè)置了郵箱昵稱(chēng)刊苍、在github上面現(xiàn)實(shí)的就是關(guān)于這個(gè)郵箱的帳號(hào)的信息,
- 如果沒(méi)有設(shè)置濒析,提交是成功的,在github上面現(xiàn)實(shí)的提交人就是 郵箱:你的機(jī)器名稱(chēng) 昵稱(chēng):你的機(jī)器的用戶(hù)名稱(chēng)啥纸。
總結(jié)
ssh對(duì)于身份驗(yàn)證應(yīng)用于很多領(lǐng)域号杏,所以理解好ssh的原理,走到哪里道理還是一樣斯棒。謝謝觀看盾致!
請(qǐng)作者喝茶: