- 傳統的網絡服務程序,如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方式登錄到了系統。
~$ 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
附錄
- 博客園-Blog
- GitHub-Blog
- 關注微信訂閱號: