一、修改vi /etc/ssh/sshd_config 檔案
1、修改預設連接埠:預設Port為22,並且已經注釋掉了;修改是把注釋去掉,並修改成其它的連接埠。
2、禁止root使用者遠程登陸:修改PermitRootLogin,預設為yes且注釋掉了;修改是把注釋去掉,並改成no。
3、PermitEmptyPasswords no不允許空密碼使用者login
二、ssh的公開金鑰認證配置:
修改vi /etc/ssh/sshd_config 檔案
RSAAuthentication yes # 啟用 RSA 認證(預設是注釋掉的,將注釋去掉,如果不是yes,改為yes)
PubkeyAuthentication yes # 啟用公開金鑰認證(預設是注釋掉的,將注釋去掉,如果不是yes,改為yes)
PasswordAuthentication no # 禁止密碼認證(改為no,預設為yes是用密碼認證)
StrictModes no #修改為no,預設為yes.如果不修改用key登陸是出現server refused our key(如果StrictModes為yes必需保證存放公開金鑰的檔案夾的擁有與登陸使用者名稱是相同的.“StrictModes”設定ssh在接收登入請求 之前是否檢查使用者家目錄和rhosts檔案的許可權和所有權。這通常是必要的,因為新手經常會把自己的目錄和檔案設成任何人都有寫入權限。)
之後重新啟動ssh服務:/etc/init.d/ssh restart
產生登陸公開金鑰與私密金鑰,
[root@usousou192_168_0_21 ssh]# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): /home/linden.guo/.ssh/id_rsa (產生私密金鑰與公開金鑰存放位置)
Enter passphrase (empty for no passphrase): 輸入密碼
Enter same passphrase again:再次輸入密碼
Your identification has been saved in /home/linden.guo/.ssh/id_rsa. (產生的私密金鑰)
Your public key has been saved in /home/linden.guo/.ssh/id_rsa.pub. (產生的公開金鑰)
The key fingerprint is:
76:04:4d:44:25:37:0f:b1:a5:b7:6e:63:d4:97:22:6b root@usousou192_168_0_21
將 產生的公開金鑰匙id_rsa.pub傳到要登陸的伺服器上並追加到authorized_keys檔案中,放到使用者目錄的.ssh中 cat id_rsa.pub >> .ssh/authorized_keys (如果沒有authorized_keys,可直接將id_rsa.pub重新命名為authorized_keys,自己認為,沒有測試過)
使用putty串連ssh伺服器。為了使用公開金鑰認證,我們需要同時下載 puttygen 這個工具來產生 putty 所使用的密鑰
如 果你按照上面的介紹,在Linux下產生了公開金鑰和密鑰的話,那麼需要利用 puttygen 將密鑰轉換成 putty 使用的格式。將Linux下產生的密鑰 id_rsa 複製到 Windows 下。啟動 puttygen,然後單擊Load按鈕,選擇檔案類型為所有檔案,然後選擇 id_rsa,開啟。若在產生密鑰時輸入了密碼,則開啟時需要輸入該密碼(用linux產生密鑰時輸入的密碼)。之後就可以在 puttygen 的主介面上單擊 Save private key,儲存成 putty 格式的密鑰。
最好確定使用者目錄下的.ssh檔案夾對於擁有者有讀寫執行的許可權,最低要有執行許可權,如700或者100;authorized_keys檔案中有讀的許可權
註:AuthorizedKeysFile .ssh/authorized_keys(認證檔案的目錄與公開金鑰檔案名稱,可以修改,並且相應目錄也要修改,如 AuthorizedKeysFile .sshd/linden.guo_keys,需要在使用者目錄下建立.sshd檔案夾,將linden.guo_keys檔案放到下面)
三、為什麼要使用公開金鑰認證
通常,通過ssh登入遠程伺服器時,使用密碼認證,分別輸入使用者名稱和密碼,兩者滿足一定規則就可以登入。但是密碼認證有以下的缺點:
使用者無法設定空密碼(即使系統允許空密碼,也會十分危險)
密碼容易被人偷窺或猜到
伺服器上的一個帳戶若要給多人使用,則必須讓所有使用者都知道密碼,導緻密碼容易泄露,而且修改密碼時必須通知所有人
而使用公開金鑰認證則可以解決上述問題。
公開金鑰認證允許使用空密碼,省去每次登入都需要輸入密碼的麻煩
多個使用者可以通過各自的密鑰登入到系統上的同一個使用者
公開金鑰認證的原理
所 謂的公開金鑰認證,實際上是使用一對加密字串,一個稱為公開金鑰(public key),任何人都可以看到其內容,用於加密;另一個稱為密鑰(private key),只有擁有者才能看到,用於解密。通過公開金鑰加密過的密文使用密鑰可以輕鬆解密,但根據公開金鑰來猜測密鑰卻十分困難。
ssh 的公開金鑰認證就是使用了這一特性。伺服器和用戶端都各自擁有自己的公開金鑰和密鑰。為了說明方便,以下將使用這些符號。
Ac 用戶端公開金鑰
Bc 用戶端密鑰
As 伺服器公開金鑰
Bs 伺服器密鑰
在認證之前,用戶端需要通過某種方法將公開金鑰 Ac 登入到伺服器上。
認證過程分為兩個步驟。
工作階段金鑰(session key)產生
用戶端請求串連伺服器,伺服器將 As 發送給用戶端。
伺服器產生會話ID(session id),設為 p,發送給用戶端。
用戶端產生工作階段金鑰(session key),設為 q,並計算 r = p xor q。
用戶端將 r 用 As 進行加密,結果發送給伺服器。
伺服器用 Bs 進行解密,獲得 r。
伺服器進行 r xor p 的運算,獲得 q。
至此伺服器和用戶端都知道了工作階段金鑰q,以後的傳輸都將被 q 加密。
認證
伺服器產生隨機數 x,並用 Ac 加密後產生結果 S(x),發送給用戶端
用戶端使用 Bc 解密 S(x) 得到 x
用戶端計算 q + x 的 md5 值 n(q+x),q為上一步得到的工作階段金鑰
伺服器計算 q + x 的 md5 值 m(q+x)
用戶端將 n(q+x) 發送給伺服器
伺服器比較 m(q+x) 和 n(q+x),兩者相同則認證成功
伺服器端設定
使用公開金鑰認證需要對伺服器進行一些設定。修改 /etc/sshd_config 的以下配置。
RSAAuthentication yes # 啟用 RSA 認證
PubkeyAuthentication yes # 啟用公開金鑰認證
PasswordAuthentication no # 禁止密碼認證StrictModes no #修改為no,預設為yes.如果不修改用key登陸是出現server refused our key然後重新啟動 sshd。
/etc/init.d/ssh restart用戶端設定
Linux
假設用戶端的使用者 charlee 要以 guest 使用者登入到伺服器上。首先在用戶端執行下面的命令。
[charlee@client:~]$ ssh-keygen -t rsa
Generating public/private rsa1 key pair.
Enter file in which to save the key (/home/charlee/.ssh/id_rsa):
Enterpassphrase (empty for no passphrase): 輸入密碼
Enter same passphrase again: 再次輸入密碼
Your identification has been sabed in /home/charlee/.ssh/id_rsa
Your public key has been saved in /home/charlee/.ssh/id_rsa.pub產生的檔案儲存在主目錄的 .ssh 目錄下,id_rsa為用戶端密鑰,id_rsa.pub 為用戶端公開金鑰。
之後,通過 USB 磁碟機等方式將公開金鑰 id_rsa.pub 複製到伺服器上,並執行下列命令。
[guest@server:~]$ cat id_rsa.pub >> .ssh/authorized_keys其中 id_rsa.pub 是用戶端的使用者 charlee 的公開金鑰。
這樣在用戶端即可通過以下的命令串連伺服器。
[charlee@client:~]$ ssh -l guest server若不想每次登入伺服器時都輸入密碼,可以先執行下列命令:
[charlee@client:~]$ ssh-add
Enter passphrase for /home/charlee/.ssh/id_rsa: 輸入密碼
Identity added: /home/charlee/.ssh/id_rsa (/home/charlee/.ssh/id_rsa)以後登入伺服器就不需要輸入密碼了。
Windows
假設我們使用putty串連ssh伺服器。為了使用公開金鑰認證,我們需要同時下載 puttygen 這個工具來產生 putty 所使用的密鑰。
使用Linux下產生的公開金鑰和密鑰的情況
如果你按照上面的介紹,在Linux下產生了公開金鑰和密鑰的話,那麼需要利用 puttygen 將密鑰轉換成 putty 使用的格式。
將 Linux下產生的密鑰 id_rsa 複製到 Windows 下。啟動 puttygen,然後單擊Load按鈕,選擇檔案類型為所有檔案,然後選擇 id_rsa,開啟。若在產生密鑰時輸入了密碼,則開啟時需要輸入該密碼。之後就可以在 puttygen 的主介面上單擊 Save private key,儲存成 putty 格式的密鑰。
使用puttygen產生公開金鑰和密鑰
你也可以利用 puttygen 直接產生公開金鑰和密鑰。開啟 puttygen,然後在畫面下方的 Parameters 欄選擇密碼編譯演算法和加密長度(一般取預設值即可),最後單擊 Generate。畫面上會出現一個進度條,在介面上隨意移動滑鼠以產生隨機數。最後提示產生結束,單擊 Save private key 按鈕儲存密鑰。最後將上方的Public key for pasting into OpenSSH authorized_keys file欄中的內容複寫到 Linux 下使用者主目錄下的 ~/.ssh/authorized_keys 檔案中。
設定 putty 使用公開金鑰認證
先 在putty中設定好串連的主機名稱、連接埠等資訊(說明省略)。使用公開金鑰認證需要設定兩個地方:一個是 Connection 中的 Auto-login username,輸入在伺服器上的使用者名稱;另一個是 Connection->SSH->Auth中的 Private key file for authentication,選擇剛才轉換或產生的 .ppk 格式的密鑰。之後即可使用公開金鑰認證進行串連了。