作為一名 linux 管理員,在多台 Linux 服務器上登陸進行遠程操作是每天工作的一部分。但隨著服務器的增多,每次登陸,系統都會提示輸入用戶名和密碼,頻繁的輸入用戶名和密碼是一件讓人很煩的事情。也許有人說可以用一些客戶端工具,比如:SecureCRT 等,的確使用這些軟件會方便很多,但是這些軟件不是價格昂貴的商業軟件就是依附於特定平台才能安裝使用,所以我今天介紹的是使用 ssh 自帶的功能實現使用客戶端工具所能帶來的便利,那就是使用 ssh 的公鑰密鑰實現自動登陸。
測試環境:
操作系統:Red Hat Enterprise Linux AS release 4 (Nahant Update 8)
軟件版本:OpenSSH_3.9p1, OpenSSL 0.9.7a
管理服務器: ip:192.168.0.1 機器名:server
被管理服務器:ip:192.168.0.2 機器名:client
第一步:生成 ssh 公鑰密鑰對
首先,如果你沒有安裝OpenSSH,請先安裝,這個廢話了,我們現在的 linux 服務器默認都安裝 openssh 的軟件。
生成公鑰密鑰對是在管理服務器上生成的:
[root@server ~]# ssh-keygen -b 1024 -t rsa
Generating public/private rsa key pair. #提示正在生成rsa密鑰對
Enter file in which to save the key (/home/usrname/.ssh/id_dsa): #詢問公鑰和私鑰存放的位置,回車用默認位置即可
Enter passphrase (empty for no passphrase): #詢問輸入私鑰密語,輸入密語
Enter same passphrase again: #再次提示輸入密語確認
Your identification has been saved in /home/usrname/.ssh/id_dsa. #提示公鑰和私鑰已經存放在/root/.ssh/目錄下
Your public key has been saved in /home/usrname/.ssh/id_dsa.pub.
The key fingerprint is:
x6:68:xx:93:98:8x:87:95:7x:2x:4x:x9:81:xx:56:94 root@server #提示key的指紋
簡單說明一下:
-b 1024 采用長度為1024字節的公鑰/私鑰對,最長4096字節,一般1024或2048就足夠滿足安全需要了,太長的話加密解密需要的時間也增長。
-t rsa 采用rsa加密方式的公鑰/私鑰對,除了rsa還有dsa方式,rsa方式最短不能小於768字節長度。
如果還需要使用更多其他參數請參考man ssh-keygen。
在生成密鑰對的過程中你被詢問:輸入密碼短句 Enter passphrase (empty for no passphrase) ,密碼短句(passphrase)是你使用一個短語或者一句話作為密碼輸入,再由系統內部的加密或是散列算法生成虛擬密碼後,進行下一步的認證。好處是增強了安全性不易被破解。看過很多文章,裡面都把這個短句輸入為空,也就是代表不使用密碼短句。在這裡我強烈要求你輸入密碼短句。有人會說使用密碼短句後,登陸還要輸入密碼短句這樣使用沒有比使用用戶名和密碼登陸方便多少,我說請你不要急,接著看我的文章。
注意:如果你生成密鑰對而不設置密碼短語,那麼如果你的私鑰丟失了,那麼就你的麻煩可能會比丟失用戶名密碼還嚴重。
第二步:拷貝你的公鑰到被管理的服務器上
在你的管理服務器上把你的公鑰拷貝到被管理服務器上要進行自動登陸的用戶目錄下。
[root@server ~]# scp .ssh/id_dsa.pub [email protected]: #比如你想使用用戶peter登陸,則remote_usrname請以peter代替
改名和進行權限設置
登陸被管理的服務器,進入需要遠程登陸的用戶目錄,把公鑰放到用戶目錄的 .ssh 這個目錄下(如果目錄不存在,需要創建~/.ssh目錄,並把目錄權限設置為700),把公鑰改名為authorized_keys2,並且把它的用戶權限設成600。
[peter@client ~]$ ls
測試使用密鑰對進行遠程登陸
[root@server ~]# ssh [email protected]
如果你不能用正確的登錄,應該重新檢查一下你的authorized_keys2的權限。也可能要檢查.ssh目錄的權限。
使用 ssh-agent(ssh代理)自動輸入密碼短語
牢記你的“密碼短句”,現在你可以用你的密鑰而不是密碼來登錄你的服務器了,但是這樣仍然沒有省什麼事,你還是要輸入密鑰的“密碼短語”。有更簡便的方法嗎?答案就是采用SSH代理(ssh-agent),一個用來幫你記住“密碼短語”的程序。 ssh-agent是OpenSSH中默認包括的ssh代理程序。
登陸管理服務器
[root@server ~]# ssh-agent
當你運行ssh-agent,它會打印出來它使用的 ssh 的環境和變量。要使用這些變量,有兩種方法,一種是手動進行聲明環境變量,另一種是運行eval命令自動聲明環境變量。
方法一:手動聲明環境變量
[root@server ~]# SSH_AUTH_SOCK=/tmp/ssh-vEGjCM2147/agent.2147; export SSH_AUTH_SOCK;
方法二:運行eval命令自動聲明環境變量
[root@server ~]# eval `ssh-agent`
現在 ssh-agent 已經在運行了,但是 ssh-agent 裡面是空白的不會有解密的專用密鑰。我們要告訴它我們有私鑰和這個私鑰在哪兒。這就需要使用 ssh-add 命令把我們的專用密鑰添加到 ssh-agent 的高速緩存中。
[root@server ~]# ssh-add ~/.ssh/id_dsa
Enter passphrase for /home/user/.ssh/id_dsa: #輸入你的密碼短語
Identity added: /home/user/.ssh/id_dsa (/home/user/.ssh/id_dsa)
[root@server ~]# ssh-add -l #查看 ssh代理的緩存內容
1024 72:78:5e:6b:16:fd:f2:8c:81:b1:18:e6:9f:77:6e:be /root/.ssh/id_rsa (RSA)
輸入了密碼短句,現在好了,你可以登錄你的遠程服務器而不用輸入你的密碼短語了,而且你的私鑰是密碼保護的。試試看是不是很爽!
[root@server ~]# ssh [email protected]
登陸服務器進行操作結束後,記得還要把 ssh-agent 關掉,不然其他人登陸後也可以遠程了。
[root@server ~]# ssh-agent -k
呵呵,爽了吧,當然了如果管理數量眾多的服務器(服務器數量≥2位數),第一次上傳公鑰可能會是比較累的工作,但是以後就可以在維護工作中體會這種公鑰密鑰自動登陸的便利了。
本文出自 “小苗” 博客,請務必保留此出處http://7056824.blog.51cto.com/69854/403669