1. PublicKey認證基本原理
Public Key(非對稱,asymmetric)認證使用一對相關聯的Key Pair(一個公開金鑰Public Key,一個私密金鑰Private Key)來代替傳統的密碼(或我們常說的口令,Password)。顧名思義,PublicKey是用來公開的,可以將其放到SSH伺服器自己的帳號中,而PrivateKey只能由自己保管,用來證明自己身份。
使用PublicKey加密過的資料只有用與之相對應的PrivateKey才能解密。這樣在認證的過程中,PublicKey擁有者便可以通過PublicKey加密一些東西發送給對應的PrivateKey擁有者,如果在通訊的雙方都擁有對方的PublicKey(自己的PrivateKey只由自己保管),那麼就可以通過這對Key Pair來安全地交換資訊,從而實現相互認證。在使用中,我們把自己的PublicKey放在通過安全渠道放到伺服器上,PrivateKey自己保管(用一個口令把PrivateKey加密後存放),而伺服器的PublicKey一般會在第一次登入伺服器的時候存放到本地用戶端(嚴格地說來伺服器的PublicKey也應該通過安全渠道放到本地用戶端,以防止別人用他自己的PublicKey來欺騙登入)。
2. Public Key認證相對於其它SSH認證的優點
在眾多SSH登入認證中,傳統的單口令(Password)認證用得比較多,所以在這裡我們主要對比一下SSH認證中的口令(Password)認證和PublicKey認證的區別。
a. 基於主機IP(rhost)的認證:對於某個主機(IP)信任並讓之登入,這種認證容易受到IP欺騙攻擊。 b. Kerberos認證:一個大型的基於域的認證,這種認證安全性高,但是太大、太複雜不方便部署。
c. PAM認證:類似於傳統的密碼認證,是絕大多數Unix/Linux系統內建的一個認證和記帳的模組,它的功能比較複雜,配置起來比較麻煩。而且,容易由於配置失誤而引起安全問題。 汗維
d. 傳統的Unix/Linux口令(或密碼Password)認證:在用戶端直接輸入帳號密碼,然後讓SSH加密傳輸到伺服器端驗證。這種認證方式有著如下明顯的缺點:
1)為了確保密碼安全,密碼必須很長很複雜,但是這樣的密碼很難記憶;
2)對於自己所擁有的每個帳號,為了安全,不同的帳號都要設定不同的密碼,管理起來很不方便;
3) 對於預設帳號,預設密碼,例如裝機時用的帳號,如果一時疏忽沒有改密碼,被其它不懷好意的人掃描到帳號和密碼,可能會造成安全性漏洞;
4)如果遠程主機已經被攻擊,即使使用SSH安全通道進行保護,在網路上發送的密碼在到達遠程主機時也可能被截獲;
5)對於每個帳號的修改都要人工登入(為了安全,不能把Password放到指令碼裡),隨著伺服器數量增多,這項工作會變得十分煩瑣。
3. Public Key配置
使用一種被稱為"公私密金鑰"認證的方式來進行ssh登入. "公私密金鑰"認證方式簡單的解釋:首先在用戶端上建立一對公私密金鑰 (公開金鑰檔案:~/.ssh/id_rsa.pub; 私密金鑰檔案:~/.ssh/id_rsa)
然後把公開金鑰放到伺服器上(~/.ssh/authorized_keys), 自己保留好私密金鑰.在使用ssh登入時,ssh程式會發送私密金鑰去和伺服器上的公開金鑰做匹配.如果匹配成功就可以登入了
步驟如下:
本地
先要在本地產生一個 rsa 的公用 key .然後 copy 到遠程你要認證的伺服器建立 key
ssh-keygen -t rsa
這裡會提示輸入密碼,(這個密碼與與遠程ssh登入密碼無關)
2、將公開金鑰檔案複製到遠程伺服器上:
$ scp ~/.ssh/id_dsa.pub user@remote.host:pubkey.txt
$ ssh user@remote.host
$ mkdir ~/.ssh
$ chmod 700 .ssh
$ cat pubkey.txt >> ~/.ssh/authorized_keys
$ rm ~/pubkey.txt
$ chmod 600 ~/.ssh/*
$ exit
//許可權的設定非常重要,因為不安全的設定安全設定,會讓你不能使用RSA功能。
Public-key 認證機制比密碼要安全, 因為密碼不在網路上傳輸. 而且可以是用加密的方式儲存的,為了安全,也可以設定一個passphrase,這樣,別人拿到密鑰也沒有用.
如果以上步驟不能實現不輸密碼登陸的話,需要檢查sshd服務的Pubkey認證功能是否預設開啟
/etc/ssh/sshd_config:
PubkeyAuthentication yes
如果修改後記的要重起你的ssh服務,用ssh –v來顯示詳細的登陸過程.
最後一步
建議不使用靜態密碼,我們都使用key了,修改如下內容可以關閉使用密碼認證:
UsePAM yes
為
UserPAM no
關閉Pam的傳統密碼認證.
如果使用Windows中的Putty
如果想使用putty,因為ssh-keygen產生的SSH2和putty的key格式不同,無法直接使用,必須用 puttygen.exe 轉換一下:
把Linux的id_rsa想法copy到windows中,運行puttygen.exe,選擇菜單Conversions->Import key然後save private key,就可以使用這個private key設定putty了.
Windows中設定Putty使用key
1) 啟動Putty,設定好session的各項參數(如果以前已經設定過,那麼load一下),然後從左邊選擇“SSH->Auth”,點擊 Browse 按鈕,選擇 key.ppk 檔案。
2) 設定 auto-login 使用者名稱,Connection -> Data -> Auto-login username
3) 再從左邊選擇 Session,然後點擊 Save 按鈕把修改儲存下來。然後點擊Open 按鈕就可以登入了。
如果上面的操作都沒有問題,那這時應該就自動登入了,無需輸入密碼。
putty的密鑰轉換成SecureCRT的密鑰
以前用的是putty,產生了PUB/PRIVATE KEY的,現在用puttygen.exe load private key,然後用Conversions匯出到openssh格式的private key,名為identy,接著把pubkey也匯出來,叫identy.pub,放到相同的目錄下,最後在securecrt的session裡指定 private key就OK了,一定要弄成xx xx.pub的,否則笨笨會說找不到密碼。
例: secureCRT 配置公開金鑰
在windows客戶機上,建立C:/SSH目錄,然後將id_dsa和id_dsa.pub原封不動的複製到C:/SSH裡,確保檔案名稱為id_dsa和id_dsa.pub
配置SCRT
請確認SecureCRT安裝或升級到4.0以上,我目前使用的是4.1,然後開始配置。
第一步:開啟要配置認證的主機名稱記錄,選中主機名稱後,點圖中紅色方框的表徵圖,進入該主機的詳細配置介面。
第二步,Connection頁中,Username填寫要登陸的使用者,該使用者就是剛才建立認證的使用者,這個必須注意。然後在Connection --> Authentication 中,Primary認證方法選PublicKey,並點開“Properties”。
第三步,選Use session public key ,意思是每個不同會話使用不同的認證,這對於管理大量主機的系統管理員較為有用。如果只是維護少量機器,可以考慮使用同一套認證。
Use identity file那裡,開啟“...”按鈕,瀏覽我的電腦,找到C:/SSH目錄,然後看到id_dsa和id_dsa.pub檔案,選中id_dsa檔案,然後確定,就可以看到路徑為C:/SSH/id_dsa 了。
儲存好配置,關閉SecureCRT,然後開啟配置了認證的主機,正常情況下將提示要輸入密鑰的加密字,輸入後就應該可以登陸進系統了。
同時再開啟另一個SCRT視窗。登陸同樣的主機,由於SCRT已緩衝了認證及加密字,因此不再需要輸入使用者名稱密碼,使用就很方便了!
轉自:http://hi.baidu.com/beijiqieys/blog/item/fe7b1303f7185a783812bbf6.html