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