在Linux上工做,ssh是必需要了解的技術方法。它能夠創建起多臺主機之間的安全的加密傳輸,以進行遠程的訪問、操控、傳輸數據。linux
ssh是什麼?算法
SSH為Secure Shell的縮寫。為創建在應用層和傳輸層基礎上的安全協議。安全
傳統的網絡服務程序,如FTP、POP和Telnet其本質上都是不安全的;由於它們在網絡上用明文傳送數據、用戶賬號和用戶口令,很容易受到中間人(man-in-the-middle)攻擊方式的攻擊。就是存在另外一我的或者一臺機器冒充真正的服務器接收用戶傳給服務器的數據,而後再冒充用戶把數據傳給真正的服務器。 而SSH是目前較可靠,專爲遠程登陸會話和其餘網絡服務提供安全性的協議。利用SSH協議能夠有效防止遠程管理過程當中的信息泄露問題。透過SSH能夠對全部傳輸的數據進行加密,也可以防止DNS欺騙和IP欺騙。 SSH之另外一項優點為其傳輸的數據是通過壓縮的,因此能夠加快傳輸的速度。SSH有不少功能,它既能夠代替Telnet,又能夠爲FTP、POP、甚至爲PPP提供一個安全的「通道」。 瞭解這麼多就行了,其實ssh鏈接也就是能夠理解成通過加密的遠程訪問啦。服務器
ssh鏈接的驗證、加密方式網絡
ssh鏈接是CS模型(客戶端-服務器),客戶端發出鏈接申請,服務器對客戶端進行驗證,再考慮是否接受鏈接申請。session
ssh的安全加密方式的理論基礎是非對稱加密體系。而非對稱加密中,常見的一種就是RSA加密算法。在使用ssh,務必先弄清楚非對稱加密和rsa的算法流程。詳情參見RSA加密算法。ssh
ssh有兩種級別的安全驗證:帳戶口令驗證、rsa加密驗證。詳細參數,能夠在sshd_config配置文件中設置(Ubuntu是/etc/ssh/sshd_config,mac下是/etc/sshd_config)加密
帳號口令驗證ip
直接輸入所要登錄的用戶的口令是默認的方式。不須要修改配置文件。get
若是直接從客戶端將用戶密碼傳輸到服務器,那麼密碼信息很容易被中間人截獲,從而實現重放攻擊。ssh的實現方式是:
1.客戶端向ssh服務器發出請求,服務器將本身的公鑰返回給客戶端;
2.客戶端用服務器的公鑰加密本身的登陸密碼,再將信息發送給服務器;
3.服務器接收到客戶端傳送的密碼,用本身的私鑰解碼,若是結果正確,則贊成登陸,創建起鏈接。
這種方式仍是有漏洞的,中間人能夠假扮成服務器,騙取客戶端的密碼。
RSA加密驗證
RSA加密驗證方式,充分利用了非對稱加密體系的優點,不須要在網絡傳輸密碼,徹底杜絕了中間人攻擊的可能。步驟以下:
準備工做:
1.客戶端先使用 ssh-keygen 命令,生成私鑰和公鑰。按照默認配置,私鑰會被保存在~/.ssh/id_rsa中,公鑰則在~/.ssh/id_rsa.pub中。(通常別修改這裏的文件)
2.客戶端經過安全的方式將公鑰發送給服務器。在服務器端,將客戶端發的公鑰寫入到~/.ssh/authorized_keys文件末尾。
創建鏈接
1.客戶端發出申請。服務器產生session密鑰對,返回經過對應客戶端的公鑰加密後的session公鑰。
2.客戶端用本身的密鑰解密信息,獲得session公鑰。
3.以後的數據交互,都經過對方方公鑰加密,對方收到信息後,用其私鑰解密,實現安全加密過程。