通信 / SSH介绍和使用,SSH key教程
一、SSH
1、概述
SSH 為 Secure Shell 的縮寫(xiě),由 IETF 的網(wǎng)絡(luò)小組(Network Working Group)所制定。利用 SSH 協(xié)議可以有效防止遠(yuǎn)程管理過(guò)程中的信息泄露問(wèn)題。簡(jiǎn)單說(shuō),SSH 是一種網(wǎng)絡(luò)協(xié)議,用于計(jì)算機(jī)之間的加密登錄。
最早的時(shí)候,互聯(lián)網(wǎng)通信都是明文通信,一旦被截獲,內(nèi)容就暴露無(wú)疑。1995年,芬蘭學(xué)者 Tatu Ylonen 設(shè)計(jì)了 SSH 協(xié)議,將登錄信息全部加密,成為互聯(lián)網(wǎng)安全的一個(gè)基本解決方案,迅速在全世界獲得推廣,目前已經(jīng)成為 Linux 系統(tǒng)的標(biāo)準(zhǔn)配置。如果要在 Windows 系統(tǒng)中使用 SSH,會(huì)用到另一種軟件 PuTTY。
SSH 之所以能夠保證安全,原因在于它采用了公鑰加密。
2、過(guò)程
(1)遠(yuǎn)程主機(jī)收到用戶(hù)的登錄請(qǐng)求,把自己的公鑰發(fā)給用戶(hù)。
(2)用戶(hù)使用這個(gè)公鑰,將登錄密碼加密后,發(fā)送回來(lái)。
(3)遠(yuǎn)程主機(jī)用自己的私鑰,解密登錄密碼,如果密碼正確,就同意用戶(hù)登錄。
3、中間人攻擊與解決辦法
(1)什么是中間人攻擊?
中間人收到遠(yuǎn)程主機(jī)公鑰之后,冒充遠(yuǎn)程主機(jī)將偽造的公鑰發(fā)給用戶(hù),用戶(hù)將很難辨別真?zhèn)?#xff0c;用戶(hù)用偽造的公鑰加密時(shí)會(huì)被中間人截獲,會(huì)出現(xiàn)安全漏洞。因?yàn)椴幌?https 協(xié)議,SSH 協(xié)議的公鑰是沒(méi)有證書(shū)中心(CA)公證的,也就是說(shuō),是自己簽發(fā)的。
(2)解決辦法:
如果是第一次登錄對(duì)方主機(jī),系統(tǒng)會(huì)出現(xiàn)下面的提示:
$ ssh user@hostThe authenticity of host 'host (12.18.429.21)' can't be established.RSA key fingerprint is 98:2e:d7:e0:de:9f:ac:67:28:c2:42:2d:37:16:58:4d.Are you sure you want to continue connecting (yes/no)?表示無(wú)法確認(rèn) host 主機(jī)的真實(shí)性,只知道它的公鑰指紋是***,接受輸入yes?
所謂"公鑰指紋",是指公鑰長(zhǎng)度較長(zhǎng)(這里采用RSA(Rivest-Shamir-Adleman一直非對(duì)稱(chēng)加密算法),長(zhǎng)達(dá)1024位),很難比對(duì),所以對(duì)其進(jìn)行 MD5 計(jì)算,將它變成一個(gè)128位的指紋。
上例中是 98:2e:d7:e0:de:9f:ac:67:28:c2:42:2d:37:16:58:4d 以簡(jiǎn)化對(duì)比。遠(yuǎn)程主機(jī)必須在自己的網(wǎng)站上貼出公鑰指紋,以便用戶(hù)自行核對(duì)。
輸入 yes 后,出現(xiàn):
Warning: Permanently added 'host,12.18.429.21' (RSA) to the list of known hosts.然后,會(huì)要求輸入密碼。如果密碼正確,就可以登錄了。
當(dāng)遠(yuǎn)程主機(jī)的公鑰被接受以后,它就會(huì)被保存在文件 $HOME/.ssh/known_hosts 之中。下次再連接這臺(tái)主機(jī),系統(tǒng)就會(huì)認(rèn)出它的公鑰已經(jīng)保存在本地了,從而跳過(guò)警告部分,直接提示輸入密碼。
每個(gè) SSH 用戶(hù)都有自己的 known_hosts 文件,此外系統(tǒng)也有一個(gè)這樣的文件,通常是 /etc/ssh/ssh_known_hosts,保存一些對(duì)所有用戶(hù)都可信賴(lài)的遠(yuǎn)程主機(jī)的公鑰。
二、使用場(chǎng)景
1、遠(yuǎn)程登陸
SSH 主要用于遠(yuǎn)程登錄。假定你要以用戶(hù)名 user,登錄遠(yuǎn)程主機(jī) host,只要一條簡(jiǎn)單命令就可以了。
$ ssh user@host如果本地用戶(hù)名與遠(yuǎn)程用戶(hù)名一致,登錄時(shí)可以省略用戶(hù)名。
$ ssh hostSSH 的默認(rèn)端口是 22,也就是說(shuō),你的登錄請(qǐng)求會(huì)送進(jìn)遠(yuǎn)程主機(jī)的 22 端口。使用 p 參數(shù),可以修改這個(gè)端口。
$ ssh -p 2222 user@host上面這條命令表示,ssh 直接連接遠(yuǎn)程主機(jī)的 2222 端口。
2、SSH key 登陸
使用密碼登錄,每次都必須輸入密碼,非常麻煩。SSH提供了公鑰登錄,可以省去輸入密碼的步驟
用戶(hù)將自己的公鑰儲(chǔ)存在遠(yuǎn)程主機(jī)上。登錄的時(shí)候,遠(yuǎn)程主機(jī)會(huì)向用戶(hù)發(fā)送一段隨機(jī)字符串,用戶(hù)用自己的私鑰加密后,再發(fā)回來(lái)。遠(yuǎn)程主機(jī)用事先儲(chǔ)存的公鑰進(jìn)行解密,如果成功,就證明用戶(hù)是可信的,直接允許登錄shell,不再要求密碼。
這種方法要求用戶(hù)必須提供自己的公鑰。如果沒(méi)有現(xiàn)成的,可以直接用 ssh-keygen 生成一個(gè):
$ ssh-keygen其中一步是私鑰設(shè)置口令(passphrase),如果擔(dān)心私鑰的安全,這里可以設(shè)置一個(gè)。
運(yùn)行結(jié)束以后,在 $HOME/.ssh/ 目錄下,會(huì)新生成兩個(gè)文件:id_rsa.pub 和 id_rsa。前者是你的公鑰,后者是你的私鑰。
這時(shí)再輸入下面的命令,將公鑰傳送到遠(yuǎn)程主機(jī) host 上面:
$ ssh-copy-id user@host好了,從此你再登錄,就不需要輸入密碼了。
如果還是不行,就打開(kāi)遠(yuǎn)程主機(jī)的 /etc/ssh/sshd_config 這個(gè)文件,檢查下面幾行前面"#"注釋是否取掉。
RSAAuthentication yes PubkeyAuthentication yes AuthorizedKeysFile .ssh/authorized_keys然后,重啟遠(yuǎn)程主機(jī)的ssh服務(wù)。
// ubuntu系統(tǒng) service ssh restart// debian系統(tǒng)/etc/init.d/ssh restart3、使用 git gui 生成公鑰私鑰
git Gui>Help>Show ssh key > generate產(chǎn)生的 keys 存儲(chǔ)在 Users/Username/.ssh 文件夾中。
4、其他
win10 使用 git clone ssh://user@host/**/**.git 的時(shí)候報(bào)錯(cuò) no matching key exchange method found. Their offer: diffie-hellman-group1-sha1
??????? 解決: 在 windows Users/Username/.ssh 中添加一個(gè)名為 config 的文件,中間填上
Host infrashdev003.sh.intel.comKexAlgorithms +diffie-hellman-group1-sha1?
(SAW:Game Over!)
?
總結(jié)
以上是生活随笔為你收集整理的通信 / SSH介绍和使用,SSH key教程的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: javascript / node.js
- 下一篇: Docker / 深入理解的容器和镜像