天天看點

實作ssh的無密碼登入

這裡所說的ssh是指OpenSSH SSH用戶端,是用于登入遠端主機,并且在遠端主機上執行指令。它的目的是替換rlogin和rsh,同時在不安全的網絡之上,兩個互不信任的主機之間,提供加密的、安全的通信連接配接。X11連接配接和任意TCP/IP端口均可以通過此安全通道轉發。

在RedHat 6.1中,預設安裝的OpenSSL是一種比較常見的SSH服務端和用戶端軟體,預設端口是22。

SSH服務端其實是一個守護程序(daemon),在背景運作并相應來自用戶端的連接配接請求。服務端一般是sshd程序,提供了對遠端連接配接的處理,一般包括公共密鑰認證、密鑰交換、對稱密鑰加密和非安全連接配接等。

SSH用戶端程式包括ssh程式,及scp(遠端拷貝)、slogin(遠端登入)、sftp(安全檔案傳輸)等其他的應用程式。

在有些情況下,需要實作ssh的無密碼登入,或者稱為免密碼登入。比如:Hadoop的僞分布式模式部署、完全分布式模式部署。

配置

有兩台主機:主機A:192.168.1.132,主機B:192.168.1.133,需要配置主機A無密碼登入主機A、主機B。

生成私鑰、公鑰

在主機A上:

$ cd ~/.ssh(如果沒有改檔案夾,直接建立一個)
$ ssh-keygen -t rsa      

上面的ssh-keygen指令中,參數-t是生成密鑰的方式,有三種方式:協定版本1的rsa1、協定版本2的rsa和dsa。通常選rsa或dsa,既安全,又省事。

這個時候會列印一些執行結果及互動操作,一路回車即可。

Generating public/private rsa key pair.
Enter file in which to save the key (/home/lxh/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/lxh/.ssh/id_rsa.
Your public key has been saved in /home/lxh/.ssh/id_rsa.pub.
The key fingerprint is:
2e:34:7c:3a:be:e4:3b:93:2f:1d:32:4f:2d:fe:13:a1 lxh@master
The key's randomart image is:
+--[ RSA 2048]----+
|                 |
|                 |
|                 |
|     .    .      |
|      + So .     |
|     .o=E o      |
|      =O.o .     |
|     +=o+ .      |
|      =B....     |
+-----------------+      

生成存放RSA/DSA的公鑰

直接複制生成的id_rsa.pub檔案即可。

$ cp id_rsa.pub authorized_keys
$ chmod 600 authorized_keys      

按理說此時就可以無密碼登入本機了,即通過指令:

$ ssh localhost      

第一次需要輸入一個yes,因為需要在第一次登入該主機時記錄有使用者登入,之後就不會出現了。

複制公鑰

然後将公鑰檔案authorized_keys拷貝到主機B的相同位置上。

$ scp authorized_keys 192.168.1.133:~/.ssh      

因為已經在主機A上修改過authorized_keys的權限,一般主機B上也是600格式,如果不是,就修改主機B上的authorized_keys檔案權限為600。

$ chmod 600 authorized_keys      

一般情況下,可以通過主機A無密碼登入主機A和主機B了。

FQA

登入時出現“Agent admitted failure to sign using the key.”

在~/.ssh目錄中執行

$ ssh-add      

出現下面的資訊,就成了:

Identity added: /home/lxh/.ssh/id_rsa (/home/lxh/.ssh/id_rsa)      

如果提示下面的資訊:

Could not open a connection to your authenticationh agent      

就執行:

ssh-agent bash      

沒有錯誤資訊,但需要輸入密碼登入

需要檢視一下.ssh目錄和authorizedkeys檔案的權限,需要.ssh目錄的權限為700,authorizedkeys檔案的權限為600。如果主機A連接配接主機B,就在主機B上執行:

$chmod 700 ~/.ssh
$chmod 600 ~/.ssh/authorized_keys      

ssh代理未開啟

通過指令檢視ssh代理是否開啟

$ ps -ef|grep ssh-agent      

如果開啟了,直接kill掉,然後啟動ssh代理。

$ ssh-agent      

如果還是不行,就重新開機ssh服務:

# service sshd restart(需要root權限)      

繼續閱讀