A機器(ssh連接發起端,即客戶端):
添加一個測試用戶aaa
復制代碼代碼如下:
[root@A ~]# useradd aaa
su成aaa
復制代碼代碼如下:
[root@A ~]# su - aaa
[aaa@A ~]$
ssh-keygen創建rsa密鑰對
復制代碼代碼如下:
[aaa@A ~]$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/aaa/.ssh/id_rsa): 密鑰文件的保存位置
Created directory '/home/aaa/.ssh'. 默認的密鑰文件存放目錄
Enter passphrase (empty for no passphrase): 密鑰文件的保護密碼
Enter same passphrase again:
Your identification has been saved in /home/aaa/.ssh/id_rsa. 生成的私鑰
Your public key has been saved in /home/aaa/.ssh/id_rsa.pub. 生成的公鑰
The key fingerprint is:
81:d7:de:e7:cb:7c:4e:16:d6:76:da:9d:30:25:76:09 [email protected]
復制代碼代碼如下:
[aaa@A ~]$ ll
total 32K
drwx------ 3 aaa aaa 4.0K Sep 17 16:09 .
drwxr-xr-x 4 root root 4.0K Sep 17 16:09 ..
-rw-r--r-- 1 aaa aaa 304 Sep 17 16:09 .bash_logout
-rw-r--r-- 1 aaa aaa 191 Sep 17 16:09 .bash_profile
-rw-r--r-- 1 aaa aaa 124 Sep 17 16:09 .bashrc
-rw-r--r-- 1 aaa aaa 383 Sep 17 16:09 .emacs
drwx------ 2 aaa aaa 4.0K Sep 17 16:09 .ssh 創建出的.ssh目錄默認權限為700
注意生成的私鑰文件的默認權限是rw-------,即600(確保他人不能查看)
復制代碼代碼如下:
[aaa@A ~]$ ll .ssh/
total 16K
drwx------ 2 aaa aaa 4.0K Sep 17 16:09 .
drwx------ 3 aaa aaa 4.0K Sep 17 16:09 ..
-rw------- 1 aaa aaa 951 Sep 17 16:09 id_rsa 私鑰文件
-rw-r--r-- 1 aaa aaa 231 Sep 17 16:09 id_rsa.pub 公鑰文件
B機器(ssh的被連接端,即服務端):
添加bbb用戶
復制代碼代碼如下:
[root@B ~]# useradd bbb
su成bbb
復制代碼代碼如下:
[root@B ~]# su - bbb
手工在家目錄下建立.ssh目錄(如果不使用ssh-keygen工具的話)
復制代碼代碼如下:
[bbb@B ~]$ mkdir .ssh
[bbb@B ~]$ ls -al
total 28
drwx------ 3 bbb bbb 4096 Sep 17 16:52 .
drwxr-xr-x 4 root root 4096 Sep 17 16:52 ..
-rw-r--r-- 1 bbb bbb 304 Sep 17 16:52 .bash_logout
-rw-r--r-- 1 bbb bbb 191 Sep 17 16:52 .bash_profile
-rw-r--r-- 1 bbb bbb 124 Sep 17 16:52 .bashrc
drwxrwxr-x 2 bbb bbb 4096 Sep 17 16:52 .ssh
修改.ssh目錄的權限為700(非常重要!)
復制代碼代碼如下:
[bbb@B ~]$ chmod 700 .ssh
[bbb@B ~]$ ls -al
total 28
drwx------ 3 bbb bbb 4096 Sep 17 16:52 .
drwxr-xr-x 4 root root 4096 Sep 17 16:52 ..
-rw-r--r-- 1 bbb bbb 304 Sep 17 16:52 .bash_logout
-rw-r--r-- 1 bbb bbb 191 Sep 17 16:52 .bash_profile
-rw-r--r-- 1 bbb bbb 124 Sep 17 16:52 .bashrc
drwx------ 2 bbb bbb 4096 Sep 17 16:52 .ssh 確認權限為700
在.ssh目錄裡創建authorized_keys文件,並將A機器上aaa用戶的公鑰(id_rsa.pub)內容寫入此文件(關鍵操作!)
復制代碼代碼如下:
[bbb@B ~]$ cd .ssh/
[bbb@B .ssh]$ vi authorized_keys
粘貼aaa的id_rsa.pub內容進來
修改authorized_keys的權限為400(非常重要!)
復制代碼代碼如下:
[bbb@B .ssh]$ chmod 400 authorized_keys
[bbb@B .ssh]$ ls -l authorized_keys
-r-------- 1 bbb bbb 231 Sep 17 16:53 authorized_keys 確認權限為400
配置結束。
測試:從A機器上,在aaa用戶下,使用bbb帳號登錄B機器。
復制代碼代碼如下:
[aaa@A ~]$ ssh -l bbb xxx.xxx.xxx.xxx
Enter passphrase for key '/home/aaa/.ssh/id_rsa': 會提示輸入私鑰保護密碼(在創建密鑰對時輸的密碼,輸入正確後進入系統)
[bbb@B ~]$
安全的關鍵點在於如何安全地將id_rsa.pub的內容傳遞到服務端
測試完畢,清理系統(刪除測試用戶帳號及其家目錄)
A機器上,exit到root下
復制代碼代碼如下:
[root@A ~]# userdel -r aaa
B機器上,exit到root下
復制代碼代碼如下:
[root@B ~]# userdel -r bbb
PS:SSH連接自動斷開問題的解決
用putty/SecureCRT連續3分鐘左右沒有輸入, 就自動斷開, 然後必須重新登陸, 很麻煩.
在網上查了很多資料, 發現原因有多種, 環境變量TMOUT引起,ClientAliveCountMax和ClientAliveInterval設置問題或者甚至是防火牆的設置問題. 所以可以這麼嘗試:
1, echo $TMOUT
如果顯示空白,表示沒有設置, 等於使用默認值0, 一般情況下應該是不超時. 如果大於0, 可以在如/etc/profile之類文件中設置它為0.
Definition: TMOUT: If set to a value greater than zero, the value is interpreted as the number of seconds to wait for input after issuing the primary prompt. Bash terminates after waiting for that number of seconds if input does not arrive.
2. ClientAliveInterval 60
在/etc/ssh/sshd_config中增加ClientAliveInterval 60, ClientAliveInterval指定了服務器端向客戶端請求消息的時間間隔, 默認是0, 不發送.而ClientAliveInterval 60表示每分鐘發送一次, 然後客戶端響應, 這樣就保持長連接了.這裡比較怪的地方是:不是客戶端主動發起保持連接的請求(如FTerm, CTerm等),而是需要服務器先主動.
另外,至於ClientAliveCountMax, 使用默認值3即可.ClientAliveCountMax表示服務器發出請求後客戶端沒有響應的次數達到一定值, 就自動斷開. 正常情況下, 客戶端不會不響應.
3. 啟用putty keepalive
復制代碼代碼如下:
putty -> Connection -> Seconds between keepalives ( 0 to turn off ), 默認為0, 改為60.
4.SecureCRT設置反空閒
復制代碼代碼如下:
option->session option->Terminal->Anti-idle->Send protocol NO-OP every__seconds
每隔幾秒發送空字符串 保持鏈接不斷開