A機器(ssh連接發(fā)起端,即客戶端):
添加一個測試用戶aaa
[root@A ~]# useradd aaa
su成aaa
[root@A ~]# su - aaa
[aaa@A ~]$
ssh-keygen創(chuàng)建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'. 默認(rèn)的密鑰文件存放目錄
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 aaa@A.test.com
[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 創(chuàng)建出的.ssh目錄默認(rèn)權(quán)限為700
注意生成的私鑰文件的默認(rèn)權(quán)限是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的被連接端,即服務(wù)端):
添加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目錄的權(quán)限為700(非常重要?。?br />
[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 確認(rèn)權(quán)限為700
在.ssh目錄里創(chuàng)建authorized_keys文件,并將A機器上aaa用戶的公鑰(id_rsa.pub)內(nèi)容寫入此文件(關(guān)鍵操作?。?br />
[bbb@B ~]$ cd .ssh/
[bbb@B .ssh]$ vi authorized_keys
粘貼aaa的id_rsa.pub內(nèi)容進(jìn)來
修改authorized_keys的權(quán)限為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 確認(rèn)權(quán)限為400
配置結(jié)束。
測試:從A機器上,在aaa用戶下,使用bbb帳號登錄B機器。
[aaa@A ~]$ ssh -l bbb xxx.xxx.xxx.xxx
Enter passphrase for key '/home/aaa/.ssh/id_rsa': 會提示輸入私鑰保護密碼(在創(chuàng)建密鑰對時輸?shù)拿艽a,輸入正確后進(jìn)入系統(tǒng))
[bbb@B ~]$
安全的關(guān)鍵點在于如何安全地將id_rsa.pub的內(nèi)容傳遞到服務(wù)端
測試完畢,清理系統(tǒng)(刪除測試用戶帳號及其家目錄)
A機器上,exit到root下
[root@A ~]# userdel -r aaa
B機器上,exit到root下
[root@B ~]# userdel -r bbb
PS:SSH連接自動斷開問題的解決
用putty/SecureCRT連續(xù)3分鐘左右沒有輸入, 就自動斷開, 然后必須重新登陸, 很麻煩.
在網(wǎng)上查了很多資料, 發(fā)現(xiàn)原因有多種, 環(huán)境變量TMOUT引起,ClientAliveCountMax和ClientAliveInterval設(shè)置問題或者甚至是防火墻的設(shè)置問題. 所以可以這么嘗試:
1, echo $TMOUT
如果顯示空白,表示沒有設(shè)置, 等于使用默認(rèn)值0, 一般情況下應(yīng)該是不超時. 如果大于0, 可以在如/etc/profile之類文件中設(shè)置它為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指定了服務(wù)器端向客戶端請求消息的時間間隔, 默認(rèn)是0, 不發(fā)送.而ClientAliveInterval 60表示每分鐘發(fā)送一次, 然后客戶端響應(yīng), 這樣就保持長連接了.這里比較怪的地方是:不是客戶端主動發(fā)起保持連接的請求(如FTerm, CTerm等),而是需要服務(wù)器先主動.
另外,至于ClientAliveCountMax, 使用默認(rèn)值3即可.ClientAliveCountMax表示服務(wù)器發(fā)出請求后客戶端沒有響應(yīng)的次數(shù)達(dá)到一定值, 就自動斷開. 正常情況下, 客戶端不會不響應(yīng).
3. 啟用putty keepalive
putty -> Connection -> Seconds between keepalives ( 0 to turn off ), 默認(rèn)為0, 改為60.
4.SecureCRT設(shè)置反空閑
option->session option->Terminal->Anti-idle->Send protocol NO-OP every__seconds
每隔幾秒發(fā)送空字符串 保持鏈接不斷開