(轉)Linux SSH配置和禁止Root遠程登錄設置

原文linux

1、修改vi /etc/ssh/sshd_config 文件 
一、修改默認端口:默認Port爲22,而且已經註釋掉了;修改是把註釋去掉,並修改爲其它的端口。 
二、禁止root用戶遠程登錄:修改PermitRootLogin,默認爲yes且註釋掉了;修改是把註釋去掉,並改爲no。 
三、PermitEmptyPasswords   no不容許空密碼用戶login 


2、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文件放到下面) 


3、爲何要使用公鑰認證 
一般,經過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 爲客戶端公鑰。 

以後,經過 U 盤等方式將公鑰 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 格式的密鑰。以後便可使用公鑰認證進行鏈接了。算法

相關文章
相關標籤/搜索