SSH

SSH 背景

  • 解決的問題:明文登陸信息暴露問題。html

  • 歷史:
    1. 1995 年,芬蘭赫爾辛基理工大學的 Tatu Ylonen 發現本身學校存在嗅探密碼的網絡攻擊,因而開發了 SSH (Secure Shell)通訊安全協議,用於加密登陸,並隨後以避免費軟件形式發佈,並創辦 SSH 通訊安全公司來繼續開發和銷售SSH。
    2. 截至2005年,OpenSSH 是惟一一種最流行的SSH實現,並且成爲了大量操做系統的默認組件。

SSH 原理

核心:非對稱加密算法

整個過程是這樣的:shell

  1. 遠程主機收到用戶的登陸請求,把本身的公鑰發給用戶。
  2. 用戶使用這個公鑰,將登陸密碼加密後,發送回來。
  3. 遠程主機用本身的私鑰,解密登陸密碼,若是密碼正確,就贊成用戶登陸。

口令登陸

用戶使用 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

  1. 使用 ssh-keygen 在本地目錄 $HOME/.ssh/ 生成公鑰 id_rsa.pub 和密鑰 id_rsa加密

  2. 使用 ssh-copy-id user@host 將公鑰上傳至遠程主機 host 中,實現細節是:操作系統

    $ ssh user@host 'mkdir -p .ssh && cat >> .ssh/authorized_keys' < ~/.ssh/id_rsa.pub

SSH CONFIG FILE

能夠經過配置文件快速進行 ssh 登陸,配置文件有兩種:code

  1. 用戶配置文件 ~/.ssh/config
  2. 系統配置文件 /etc/ssh/ssh_config)

可配置項有:

  • Host,配置標識,使用 ssh [Host] 進行快速登陸;
  • HostName,服務器所在地址,能夠是域名或 IP;
  • User,進行 ssh 登陸的用戶名;
  • Port,指定服務器端口;
  • IdentityFile,指定私鑰文件的位置。

如在 ~/.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 一直登錄不上,又沒顯示錯誤信息

在 ssh 命名最後添加 -v/-vv 輸出鏈接信息。

參考

相關文章
相關標籤/搜索