SSH(Secure SHell)使用
1. 什么是SSH?
傳統的網絡服務程序,如ftp,pop和telnet在本質上是不安全的,因為它們使用明文
傳送口令和數據,很容易被冒充真正服務器的中間人修改通信數據,影響你的正常通信。
SSH可以對你的數據進行加密,所以可以防止"中間人"攻擊,DNS和IP欺騙,還一個
好處是它對傳輸數據進行了壓縮,可以加快傳輸的速度。
現在一般使用的是OpenSSH 2.X,免費,而且同時支持1.x和2.x的版本。
2. SSH是如何工作的?
從客戶端來看,SSH提供兩種級別的安全驗證:
1. 基於口令的安全驗證,只要知道自己的賬號和密碼就可以登錄遠程的主機,數據也都是
加密的,但不能確定的是正在連接的服務器是不是你想到登錄的服務器,也有可能受到"中間人"
的攻擊
2. 基於密匙的安全驗證,需要自己創建一對密匙,並把公用密匙放在服務器上。如果你需要
連接到SSH服務器上,客戶端就會向服務器端發出請求,請求用你的密匙進行安全驗證。服務器
收到請求之后,先在服務器上找到公用密匙,再用這個密匙和你發送過來的進行比對。如果兩個
密匙一致,服務器就用公用密匙加密"質詢"(challenge)並把它發送給客戶端。客戶端軟件收到
質詢之后再用你的私人密匙進行解密再把它發給服務器。
第二種方式更安全,數據加密,但登錄時間可以比較長。
3. 為什么要采用第二種方法登錄?
采用密碼登錄的缺點:
a)用戶無法設置空密碼(即使系統允許空密碼,也會十分危險)
b)密碼容易被人偷窺或猜到
c)服務器上的一個帳戶若要給多人使用,則必須讓所有使用者都知道密碼,
導致密碼容易泄露,而且修改密碼時必須通知所有人
而采用公鑰可以解決以上問題:
a)公鑰認證允許使用空密碼,省去每次登錄都需要輸入密碼的麻煩
b)多個使用者可以通過各自的密鑰登錄到系統上的同一個用戶
c)即使修改了對應用戶的密碼,也不會影響登陸
d)若同時禁用密碼認證,則只要保證私鑰的安全,不會受到暴力破解的威脅
4. 本機Win 7和Virtual box虛擬機ubuntu之間的實驗
4.1 進行ssh的密碼口令連接
1. 需要在VB中設置連接方式由NAT改為Bridge

2. 使用"sudo apt-get install openssh-server"幫Ubuntu安裝ssh服務器,
使用"sudo service ssh start"啟動ssh服務
可以使用命令ps -e|grep ssh來查看是否成功啟動

如果沒有啟動,可以使用命令sudo /etc/init.d/ssh start啟動服務
3. 在Windows即主機中使用Putty登錄Ubuntu,輸入Ubuntu的ip地址即可,
其他默認。putty的下載地址:

4. 輸入用戶名和密碼就可以遠程登錄ubuntu了

4.2 進行ssh的密鑰連接-在Win 7下制作密鑰
4.2.1 使用puttygen制作密鑰
啟動puttygen,為了兼容openssh密鑰,選擇"SSH2 RSA",點擊Generate,
並在窗口的空白區域隨意移動鼠標以獲得生成密鑰的隨機數據,直到進度條結束為止。

完成效果為:

輸入key passphrase和confirm passphrase,類似私鑰密碼,點擊"Save private key"。
公鑰信息在上面的文本框中,等下需要復制到ubuntu系統的特定文件中。

可以看到私鑰的保存內容包含了公鑰和私鑰。
4.2.2 修改ubuntu系統中openssh的配置
修改/etc/ssh/sshd_config:
PermitRootLogin no # 禁止root用戶登陸
StrictModes yes # 檢查密鑰的用戶和權限是否正確,需要是authorized_keys文件一定為644權限,默認是打開的
RSAAuthentication yes # 啟用 RSA 認證
AuthorizedKeysFile .ssh/authorized_keys # 驗證公鑰的存放路徑
PubkeyAuthentication yes # 啟用公鑰認證
PasswordAuthentication no # 禁止密碼認證,只能進行密鑰連接,默認是打開的。
ChallengeResponseAuthentication no #關閉挑戰應答方式
UsePAM no #不使用PAM認證
以上參數可以根據需要進行調整。
然后重啟sshd服務:
sudo /etc/init.d/ssh stop
sudo /etc/init.d/ssh start
或者直接:
sudo /etc/init.d/ssh restart
4.2.3 拷貝公鑰信息到ubuntu的特定文件中
在之前的窗口中,拷貝公鑰內容,並寫入~/.ssh/authroized_keys文件下

如果沒有.ssh目錄和authroized_keys文件,需要自己創建,並且要修改目錄和文件的權限
>mkdir ~/.ssh
>chmod 700 ~/.ssh
>emacs ~/.ssh/authorized_keys
>chmod 644 ~/.ssh/authorized_keys
644權限代表別人不能對此文件進行寫操作,用來保護別人不能隨意把他的
公鑰寫進去。
4.2.4 使用putty進行密鑰登錄
在Connection->SSH->Auth中選擇私鑰文件:

在Connection->Data中寫入你的登錄時用的用戶名

也要在Session那寫在ubuntu系統的IP,再點擊open按鈕。

這個時候,需要輸入passphrase密碼,也就是私鑰密碼。這個密碼的作用是保護
私鑰文件,就算別人得到你的私鑰文件,沒有這個密碼也不能進行登錄。
4.3 進行ssh的密鑰連接-在Ubuntu下制作密鑰
4.3.1 在Linux下生成密鑰
在命令行下運行:
> ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/compilers/.ssh/id_rsa): #輸入私鑰保存地址
Enter passphrase (empty for no passphrase): #輸入私鑰密碼
Enter same passphrase again: #確認密碼
Your identification has been saved in /home/compilers/.ssh/id_rsa.
Your public key has been saved in /home/compilers/.ssh/id_rsa.pub.
The key fingerprint is:
e7:f6:98:57:f0:d9:93:54:30:76:9f:10:09:c0:f8:b9 compilers@compilers-vm
The key's randomart image is:
+--[ RSA 2048]----+
| o....o*..|
| . . o.o+|
| . . .o|
| o . . |
| S o o.o.|
| E +o.|
| o . .|
| . +. |
| o.. |
+-----------------+
4.3.2 把公鑰寫入authorized_keys文件中
> cd ~/.ssh
> cat id_rsa.pub >> quthorized_keys #需要換行加入新的內容
4.3.3 生成putty私鑰
1. 把id_rsa傳到windows系統上。
2. 使用puttygen的"Load private key"讀取id_rsa文件,並輸入私鑰密碼:

文本框里的內容應該和id_rsa.pub中的一致。點擊"Save private key"保存私鑰。
4.3.4 使用putty進行密鑰登錄
那就是和之前一樣的操作:
