ssh的详细链接过程
生活随笔
收集整理的這篇文章主要介紹了
ssh的详细链接过程
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
從這個討論中﹐我發現似乎很多人對 ssh 的連線原理還不很清楚﹐
我這裡不妨就自己已知的一些概念和大家說說﹐
不保證完全正確﹐但希能有住大家的理解﹐更歡迎指出不正確之處。
ssh 之所以大行其道﹐而且被認為‘目前不可破解’的原因﹐
必須透過了解 ssh 在加密 key 之應用才能領會。
這裡﹐我們不需要再討論加密演算法了﹐相信大家對演算法一定很有信心的﹐
同時我們也知道作為加密的 key 長度越長﹐破解難度就越高﹐
所以大家應該知道要破解 1024-bit RSA/DSA 加密需要多長時間﹖
我猜目前沒有哪臺機器能在 60分鐘 內破解 768-bit 的 RSA 加密吧﹖
如果這個 key 再加上另外其他 keys 一起使用呢﹖就更難了~~
好了﹐當我們對演算法有足夠信心之後﹐
再讓我們分別看看 ssh 連線所使用到的 keys 有哪些 ﹕
* Host_Key﹕1024-bit RSA 或 DSA 非對稱加密
可以用 ssh-keygen 在任何時候產生一對 key ﹐
分別為 /etc/ssh/ssh_host_key.pub 和 /etc/ssh/ssh_host_key ﹔
其中的 public Host_Key 給對方加密使用﹐己方使用 private key 解密。
* Server_Key﹕768-bit RSA 非對稱加密
不存在硬碟上﹐每次在 sshd 啟動的時候隨機產生(關閉 sshd 則消失)﹐
並且每 60分鐘(預設)會更換一次﹔
其中的 public Server_Key 給對方加密使用﹐己方使用 private key 解密。
* Session_Key﹕256-bit Blowfish 或 IDEA 單向加密
在得到對方的 public Host_Key 和 public Server_Key 之後﹐
隨機產生﹐並連同得到的 Host_Key 和 Server_Key 一起加密﹐
以作為後面所有連續的加密之需。
Okay ﹐當我們認識了上面三把 key 之後﹐再讓我們看看 ssh 的連線過程﹕
1) ssh client 連到 server 端 tcp port 22(預設)﹐並提出連線請求﹔
2) server 端回應 Host_Key 和 Server_Key 給 client ﹔
3) client 端會對 Host_Key 進行驗證﹐以確定出現在 known_hosts 中,
??? 否則﹐會提示您是否接受 (按 yes 三鍵為接受)﹔
4) 通過驗證之後﹐client 隨機產生 Session_Key﹐
??? 並分別與收到的兩把 keys 作加密(先 Host_Key 再 Server_Key)﹐
??? 然後用來處理後面的每一個連線。
5) 進入身份驗證階段﹐通常有如下數種方式﹕
??? * Rhost
??? * Rhost & RSA
??? * RSA
??? * Password
6) 驗證成功後﹐正式進行 ssh 連線﹐直至結束。
許多朋友﹐通常卡在 authentication 這關﹐
或許會誤會 ssh 只用來加密 authentication 而已﹐
事實上是錯誤的理解。下面讓我們再看看 sshd 在驗證的時候的流程﹕
1) 檢查 tcpwrapper 設定(hosts.allow / hosts.deny)﹐
??? 如果成功則進入下一步﹐失敗則拒絕。
2) 進行 Host_Key 驗證﹐如果成功(或接受)﹐則進入下一步﹔
3) 嘗試 Rhost 驗證﹐如果成功﹐則通過驗證﹐否則進入下一步﹔
4) 嘗試 Rhost & RSA 驗證﹐如果成功﹐則通過驗證﹐否則進入下一步﹔
5) 嘗試 RSA 驗證( ssh v2 取消了﹖這個我不確定﹐參考 *** howto 要留意。)
??? 如果成功﹐則通過驗證﹐否則進入下一步﹔
6) 最後嘗試 password 驗證﹐如果成功﹐通過驗證﹐否則拒絕連線。
我這裡不妨就自己已知的一些概念和大家說說﹐
不保證完全正確﹐但希能有住大家的理解﹐更歡迎指出不正確之處。
ssh 之所以大行其道﹐而且被認為‘目前不可破解’的原因﹐
必須透過了解 ssh 在加密 key 之應用才能領會。
這裡﹐我們不需要再討論加密演算法了﹐相信大家對演算法一定很有信心的﹐
同時我們也知道作為加密的 key 長度越長﹐破解難度就越高﹐
所以大家應該知道要破解 1024-bit RSA/DSA 加密需要多長時間﹖
我猜目前沒有哪臺機器能在 60分鐘 內破解 768-bit 的 RSA 加密吧﹖
如果這個 key 再加上另外其他 keys 一起使用呢﹖就更難了~~
好了﹐當我們對演算法有足夠信心之後﹐
再讓我們分別看看 ssh 連線所使用到的 keys 有哪些 ﹕
* Host_Key﹕1024-bit RSA 或 DSA 非對稱加密
可以用 ssh-keygen 在任何時候產生一對 key ﹐
分別為 /etc/ssh/ssh_host_key.pub 和 /etc/ssh/ssh_host_key ﹔
其中的 public Host_Key 給對方加密使用﹐己方使用 private key 解密。
* Server_Key﹕768-bit RSA 非對稱加密
不存在硬碟上﹐每次在 sshd 啟動的時候隨機產生(關閉 sshd 則消失)﹐
並且每 60分鐘(預設)會更換一次﹔
其中的 public Server_Key 給對方加密使用﹐己方使用 private key 解密。
* Session_Key﹕256-bit Blowfish 或 IDEA 單向加密
在得到對方的 public Host_Key 和 public Server_Key 之後﹐
隨機產生﹐並連同得到的 Host_Key 和 Server_Key 一起加密﹐
以作為後面所有連續的加密之需。
Okay ﹐當我們認識了上面三把 key 之後﹐再讓我們看看 ssh 的連線過程﹕
1) ssh client 連到 server 端 tcp port 22(預設)﹐並提出連線請求﹔
2) server 端回應 Host_Key 和 Server_Key 給 client ﹔
3) client 端會對 Host_Key 進行驗證﹐以確定出現在 known_hosts 中,
??? 否則﹐會提示您是否接受 (按 yes 三鍵為接受)﹔
4) 通過驗證之後﹐client 隨機產生 Session_Key﹐
??? 並分別與收到的兩把 keys 作加密(先 Host_Key 再 Server_Key)﹐
??? 然後用來處理後面的每一個連線。
5) 進入身份驗證階段﹐通常有如下數種方式﹕
??? * Rhost
??? * Rhost & RSA
??? * RSA
??? * Password
6) 驗證成功後﹐正式進行 ssh 連線﹐直至結束。
許多朋友﹐通常卡在 authentication 這關﹐
或許會誤會 ssh 只用來加密 authentication 而已﹐
事實上是錯誤的理解。下面讓我們再看看 sshd 在驗證的時候的流程﹕
1) 檢查 tcpwrapper 設定(hosts.allow / hosts.deny)﹐
??? 如果成功則進入下一步﹐失敗則拒絕。
2) 進行 Host_Key 驗證﹐如果成功(或接受)﹐則進入下一步﹔
3) 嘗試 Rhost 驗證﹐如果成功﹐則通過驗證﹐否則進入下一步﹔
4) 嘗試 Rhost & RSA 驗證﹐如果成功﹐則通過驗證﹐否則進入下一步﹔
5) 嘗試 RSA 驗證( ssh v2 取消了﹖這個我不確定﹐參考 *** howto 要留意。)
??? 如果成功﹐則通過驗證﹐否則進入下一步﹔
6) 最後嘗試 password 驗證﹐如果成功﹐通過驗證﹐否則拒絕連線。
轉載于:https://blog.51cto.com/jasonyong/196469
總結
以上是生活随笔為你收集整理的ssh的详细链接过程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: HttpModule的认识与深入理解
- 下一篇: c#基础知识总结学习