解決的問題:明文登陸信息暴露問題。html
核心:非對稱加密。算法
整個過程是這樣的:shell
用戶使用 ssh user@host
登陸遠程主機時,系統會提示遠程主機的公鑰指紋,當用戶確認接收該公鑰指紋時,會保存到 $HOME/.ssh/known_hosts
中,下次登陸時會跳過。安全
公鑰指紋:公鑰長度較長(這裏採用RSA算法,長達1024位),很難比對,因此對其進行MD5計算,將它變成一個128位的指紋。上例中是
98:2e:d7:e0:de:9f:ac:67:28:c2:42:2d:37:16:58:4d
,再進行比較。服務器
所謂"公鑰登陸",原理很簡單,就是用戶將本身的公鑰儲存在遠程主機上。登陸的時候,遠程主機會向用戶發送一段隨機字符串,用戶用本身的私鑰加密後,再發回來。遠程主機用事先儲存的公鑰進行解密,若是成功,就證實用戶是可信的,直接容許登陸shell,再也不要求密碼。網絡
用戶將本身的公鑰儲存在遠程主機的具體過程以下:ssh
使用 ssh-keygen
在本地目錄 $HOME/.ssh/
生成公鑰 id_rsa.pub
和密鑰 id_rsa
;加密
使用 ssh-copy-id user@host
將公鑰上傳至遠程主機 host 中,實現細節是:操作系統
$ ssh user@host 'mkdir -p .ssh && cat >> .ssh/authorized_keys' < ~/.ssh/id_rsa.pub
能夠經過配置文件快速進行 ssh 登陸,配置文件有兩種:code
~/.ssh/config
;/etc/ssh/ssh_config)
。可配置項有:
ssh [Host]
進行快速登陸;如在 ~/.ssh/config
文件中按以下配置,則能夠經過 ssh xx-server
進行快速 ssh 登陸。
Host xx-server HostName ssh.xx-server.com User xx_user Port 2200 IdentityFile ~/.ssh/local_id_rsa
名詞 | 含義 |
---|---|
X.509 | 一種通用的證書格式,包含證書持有人的公鑰,加密算法等信息 |
pkcs1 ~ pkcs12 | 公鑰加密(非對稱加密)的一種標準,通常存儲爲 *.pN ,*.p12 是包含證書和密鑰的封裝格式 |
*.der | 證書的二進制存儲格式(不經常使用) |
*.pem | 證書或密鑰的 Base64 文本存儲格式,能夠單獨存放證書或密鑰,也能夠同時存放 |
*.key | 單獨存放的 pem 格式的密鑰,通常保存爲 *.key |
.cer .crt | 兩個指的都是證書,Linux 下叫 crt,Windows 下叫 cer;存儲格式能夠是 pem 也能夠是 der |
*.pfx | 微軟 IIS 的實現 |
*.jks | Java Keytool 實現的證書格式 |
在 ssh 命名最後添加 -v/-vv 輸出鏈接信息。