- 傳統的網絡服務程序,如rsh、FTP、POP和Telnet其本質上都是不安全的;由於它們在網絡上用明文傳送數據、用戶賬號和用戶口令,很容易受到中間人(man-in-the-middle)攻擊方式的攻擊。就是存在另外一我的或者一臺機器冒充真正的服務器接收用戶傳給服務器的數據,而後再冒充用戶把數據傳給真正的服務器。
- 而SSH是目前較可靠,專爲遠程登陸會話和其餘網絡服務提供安全性的協議。利用SSH協議能夠有效防止遠程管理過程當中的信息泄露問題。經過SSH能夠對全部傳輸的數據進行加密,也可以防止DNS欺騙和IP欺騙。
- SSH之另外一項優勢爲其傳輸的數據能夠是通過壓縮的,因此能夠加快傳輸的速度。SSH有不少功能,它既能夠代替Telnet,又能夠爲FTP、POP、甚至爲PPP提供一個安全的「通道」。
# 1. ssh 協議框架中最主要的部分是三個協議:
- 傳輸層協議:提供
服務器認證 ,數據機密性,信息完整性等
支持。
- 用戶認證協議:爲服務器提供客戶端的身份鑑別。
- 鏈接協議:將加密的信息隧道複用成若干個邏輯通道,提供給更高層的應用協議使用。
# 2. ssh 的安全驗證:
a. 基於密碼
- 對於客戶端來講:知道帳號和密碼便可登陸到遠程主機,而且全部傳輸的數據都會被加密。
可是:可能會有別的服務器冒充真正的服務器!這種方式沒法避免被【中間人】攻擊
。
- 對於服務器端,主機將本身的功用密鑰分發給相關的客戶端,客戶端在訪問主機時則使用該主機的公開密鑰來加密數據。主機則使用本身的私有密鑰來解密數據,從而實現主機密鑰認證,確保數據的保密性。
b. 基於密鑰
- 客戶端須要爲本身建立一對密鑰,並將公有密鑰放到須要訪問的服務器上。客戶端軟件向服務器服務器發出請求,請求用客戶端本身的密鑰進行安全驗證。
- 服務器端在收到請求之後,先在發送請求客戶端的用戶根目錄下尋找客戶端的公用密鑰,而後把它和客戶端發送過來的公有密鑰進行比較,若是兩個密鑰一致,服務器就用公有密鑰加密【質詢】(challenge)並把它發送給客戶端軟件。從而可以避免被【中間人】攻擊。
- 在這種方案中,須要存在一個密鑰認證中心,全部提供服務的主機都將本身的公開密鑰提供給認證中心,而任何做爲客戶端的主機則只要保存一份認證中心的公開密鑰就能夠了。這種模式下,客戶端必須訪問認證中心而後才能訪問服務器主機。
# 3. 使用XShell鏈接服務器(SSH模式)
a. 在XShell上生成密鑰對(客戶端建立本身的密鑰對)
- 打開Xshell,在菜單欄點擊「tools」,在彈出的菜單中選擇「User Key Generation Wizard...」(密鑰生成嚮導);
- 彈出「User Key Generation Wizard」對話框,在「Key Type」項選擇「RSA」公鑰加密算法,「Key Length」選擇爲「2048」位密鑰長度;
- 點擊「Next」,等待密鑰生成;
- 繼續下一步,在「Key Name」中輸入Key的文件名稱,我這裏爲「key」;在「Passphrase」處輸入一個密碼用於加密私鑰(密碼A,下面會用到),並再次輸入密碼確認;
- 點擊「Next」,密鑰生成完畢(Public key Format選擇SSH2-OpenSSH格式),這裏顯示的是公鑰,咱們能夠複製公鑰而後再保存,也能夠直接保存公鑰到文件,以下圖。私鑰這裏不顯示,能夠在「User Key Mangager...」導出到文件;
- 點擊「Save as file...」按鈕,將公鑰(Public key)保存到磁盤,文件名爲「key.pub」,備用。
b. 將密鑰上傳公鑰(Public Key)到服務器(服務器配置客戶端公鑰,這裏的用戶爲 root)
- 使用到Xshell登陸到服務器,進入到「/root/.ssh/」目錄,運行rz命令(若是沒有rz命令,運行yum install lrzsz安裝),將key.pub發送到服務器,而後運行以下命令,將公鑰(Public Key)導入到「authorized_keys」文件:
[root@localhost ~]# cd /root/.ssh/
[root@localhost .ssh]# rz
rz waiting to receive.
[root@localhost .ssh]# cat key.pub >> authorized_keys
[root@localhost .ssh]# chmod 600 authorized_keys
[root@localhost .ssh]# ls
authorized_keys key.pub
- 使用命令
ifconfig
查看服務器的 ip 地址,並記錄下來留下面使用。
c. 配置Xshell使用密鑰認證方式登陸到服務器
- 打開Xshell,點擊「New」按鈕,彈出「New Session Properties」對話框,在「Connection」欄目中,輸入剛剛配置好公鑰(Public Key)的IP地址和端口;
- 點擊左側的「Authentication」,切換到認證欄目,在「Method」選擇「Public Key」認證,用戶名輸入「root」(公鑰是放在root目錄下的.ssh文件夾中),在「User Key」中選擇咱們剛纔生成的私鑰「key」,「Passphrase」中輸入私鑰的加密密碼(密碼A);
- 點擊肯定,Xshell配置ssh免密碼登陸配置完成。
4. Linux下使用命令(ssh-keygen)生成密鑰對
~$ ssh-keygen -t rsa
5. 阻止基於密碼登錄的方式(只容許SSH登錄)
首先要已經設置好了容許 SSH 登陸,並已經以SSH方式登陸到了系統。linux
~$ su # 切換到root
~$ vim /etc/ssh/sshd_config
# 此時由於使用 SSH 登錄,下面的應該已經設置:
# RSAAuthentication yes
# PubkeyAuthentication yes
# PermitRootLogin yes
# 默認狀況下密碼登陸是 yes :
# PasswordAuthentication yes
# 要禁用的話改爲 no :
# PasswordAuthentication no
# 推出 vim 後重啓 SSH 服務
~$ service sshd restart
附錄