SSH無密碼驗證可能出現的問題

報恩的貓發表於2014-04-18
雪影工作室版權所有,轉載請註明【http://blog.csdn.net/lina791211】

一、安裝和啟動SSH協議

假設沒有安裝ssh和rsync,可以通過下面命令進行安裝。

sudo apt-get install ssh 安裝SSH協議

sudo apt-get install rsync

service sshd restart 啟動服務

rsync是一個遠端資料同步工具,可通過LAN/WAN快速同步多臺主機間的檔案)

確保所有的伺服器都安裝,上面命令執行完畢,各臺機器之間可以通過密碼驗證相互登。

Last login: Mon Oct 29 14:01:11 2012 from 10.196.80.99

hadoop@namenode:~$ ssh localhost

The authenticity of host 'localhost (127.0.0.1)' can't be established.

ECDSA key fingerprint is c0:b3:7d:6d:17:94:02:e1:e4:67:39:4f:08:ff:74:cf.

Are you sure you want to continue connecting (yes/no)? yes

Warning: Permanently added 'localhost' (ECDSA) to the list of known hosts.

hadoop@localhost's password:

… …

Last login: Mon Oct 29 14:25:47 2012 from 10.196.80.99

hadoop@namenode:~$

hadoop@namenode:~$ ssh datanode1

The authenticity of host 'datanode1 (10.196.80.91)' can't be established.

ECDSA key fingerprint is dc:8b:7b:82:25:74:0c:ec:15:a7:3b:2a:e6:c3:a0:2e.

Are you sure you want to continue connecting (yes/no)? yes

Warning: Permanently added 'datanode1,10.196.80.91' (ECDSA) to the list of known hosts.

hadoop@datanode1's password:

Welcome to Ubuntu 12.04.1 LTS (GNU/Linux 3.2.0-29-generic-pae i686)

… …

hadoop@datanode1:~$



二、配置Master無密碼登入所有Salve

1)SSH無密碼原理

Master(NameNode |JobTracker)作為客戶端,要實現無密碼公鑰認證,連線到伺服器Salve(DataNode |Tasktracker)上時,需要在Master上生成一個金鑰對,包括一個公鑰和一個私鑰,而後將公鑰複製到所有的Slave上。

當Master通過SSH連線Salve時,Salve就會生成一個隨機數並用Master的公鑰對隨機數進行加密,併傳送給Master。Master收到加密數之後再用私鑰解密,並將解密數回傳給Slave,Slave確認解密數無誤之後就允許Master進行連線了。這就是一個公鑰認證過程,其間不需要使用者手工輸入密碼。

重要過程是將客戶端Master複製到Slave上。

2)Master機器上生成密碼對

在Master節點上執行以下命令:

ssh-keygen –t rsa –P ''

這條命令是生成其無密碼金鑰對,詢問其儲存路徑時直接回車採用預設路徑。生成的金鑰對:id_rsaid_rsa.pub,預設儲存在"/home/hadoop/.ssh"目錄下。

hadoop@namenode:~$ ssh-keygen -t rsa

Generating public/private rsa key pair.

Enter file in which to save the key (/home/hadoop/.ssh/id_rsa):

Enter passphrase (empty for no passphrase):

Enter same passphrase again:

Your identification has been saved in /home/hadoop/.ssh/id_rsa.

Your public key has been saved in /home/hadoop/.ssh/id_rsa.pub.

The key fingerprint is:

c8:5e:3e:c1:9b:52:6f:24:a5:e4:c1:1c:00:8d:fb:3b hadoop@namenode

The key's randomart image is:

+--[ RSA 2048]----+

| .+... |

| . .o . |

| . = . |

| .. = + |

| .o S . |

| ..+ B |

| o.= o |

| E. o |

| . |

+-----------------+

hadoop@namenode:~$

檢視"/home/hadoop/"下是否有".ssh"資料夾,且".ssh"檔案下是否有兩個剛生產的無密碼金鑰對

hadoop@namenode:~/.ssh$ cat id_rsa.pub >> authorized_keys

在驗證前,需要做兩件事兒。第一件事兒是修改檔案"authorized_keys"許可權(許可權的設定非常重要,因為不安全的設定安全設定,會讓你不能使用RSA功能),另一件事兒是用root使用者設定"/etc/ssh/sshd_config"的內容。使其無密碼登入有效。

hadoop@namenode:~/.ssh$ chmod 600 authorized_keys

備註:如果不進行設定,在驗證時,扔提示你輸入密碼,在這裡花費了將近半天時間來查詢原因。

3) 設定SSH配置

root使用者登入伺服器修改SSH配置檔案"/etc/ssh/sshd_config"的下列內容。(在Ubuntu12.04系統裡面,貌似不用修改此檔案)

1.RSAAuthentication yes # 啟用 RSA 認證

2.PubkeyAuthentication yes # 啟用公鑰私鑰配對認證方式

3.AuthorizedKeysFile /home/hadoop/.ssh/authorized_keys # 公鑰檔案路徑(和上面生成的檔案同)

退出root登入,使用hadoop普通使用者驗證是否成功

hadoop@namenode:~/.ssh$ ssh localhost

Welcome to Ubuntu 12.04.1 LTS (GNU/Linux 3.2.0-29-generic-pae i686)

* Documentation: https://help.ubuntu.com/

191 packages can be updated.

51 updates are security updates.

Last login: Mon Oct 29 14:43:08 2012 from localhost

hadoop@namenode:~$

從上圖中得知無密碼登入本級已經設定完畢,接下來的事兒是把公鑰複製所有Slave機器上。使用下面的命令格式進行復制公鑰:

scp ~/.ssh/id_rsa.pub 遠端使用者名稱@遠端伺服器IP:~/

例如:

scp ~/.ssh/id_rsa.pub hadoop@10.196.80.1:~/

上面的命令是複製檔案"id_rsa.pub"到伺服器IP為"10.196.80.91"的使用者為"hadoop"的"/home/hadoop/"下面。

4)把namenode上的公鑰複製到datanode1上

先在每個slave機器的/home/hadoop/下新建 .ssh 資料夾。

hadoop@namenode:~/.ssh$ scp authorized_keys hadoop@datanode1:/home/hadoop/.ssh/

hadoop@datanode1's password:

authorized_keys 100% 397 0.4KB/s 00:00

hadoop@namenode:~/.ssh$

從上圖中我們得知,已經把檔案"id_rsa.pub"傳過去了,因為並沒有建立起無密碼連線,所以在連線時,仍然要提示輸入輸入database1伺服器使用者hadoop的密碼。為了確保確實已經把檔案傳過去了,用SecureCRT登入datanode1:10.196.80.91伺服器,檢視"/home/hadoop/"下是否存在.ssh這個資料夾。存在的話然後是修改資料夾".ssh"的使用者許可權,把他的許可權修改為"700",用下面命令執行:

chmod 700 ~/.ssh

備註:如果不進行,即使你按照前面的操作設定了"authorized_keys"許可權,並配置了"/etc/ssh/sshd_config",還重啟了sshd服務,在Master能用"ssh localhost"進行無密碼登入,但是對Slave1.Hadoop進行登入仍然需要輸入密碼,就是因為".ssh"資料夾的許可權設定不對。這個資料夾".ssh"在配置SSH無密碼登入時系統自動生成時,許可權自動為"700",如果是自己手動建立,它的組許可權和其他許可權都有,這樣就會導致RSA無密碼遠端登入失敗。

5)追加到授權檔案"authorized_keys"

到目前為止Master.Hadoop的公鑰也有了,資料夾".ssh"也有了,且許可權也修改了。這一步就是把Master.Hadoop的公鑰追加到Slave1.Hadoop的授權檔案"authorized_keys"中去。使用下面命令進行追加並修改"authorized_keys"檔案許可權:

cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

chmod 600 ~/.ssh/authorized_keys

root使用者修改"/etc/ssh/sshd_config"

具體步驟參考前面Master.Hadoop的"設定SSH配置",具體分為兩步:第1是修改配置檔案;第2是重啟SSH服務。

【Ubuntu下不用這一步操作貌似也是可以的。】

用namenode使用SSH無密碼登入datanode*

當前面的步驟設定完畢,就可以使用下面命令格式進行SSH無密碼登入了。

ssh 遠端伺服器IP

最後記得把所有Slave節點的"/home/hadoop/.ssh"目錄下的"id_rsa.pub"檔案刪除掉。

rm –r ~/id_rsa.pub

到此為止,我們經過前5步已經實現了從"Master"到"Slave1"SSH無密碼登入,下面就是重複上面的步驟把剩餘的兩臺(Slave2Slave3)Slave伺服器進行配置。這樣,我們就完成了"配置Master無密碼登入所有的Slave伺服器"。

6)配置所有Slave無密碼登入Master

和Master無密碼登入所有Slave原理一樣,就是把Slave的公鑰追加到Master的".ssh"資料夾下的"authorized_keys"中,記得是追加(>>

操作之前,先把namenode的/etc/hosts檔案通過scp複製到各個datanodede 的/home/hadoop/Downloads資料夾下,然後登陸各個namenode使用sudo cp命令覆蓋hosts檔案。

其他的datanode類似

 首先建立"datanode2"自己的公鑰和私鑰,並把自己的公鑰追加到"authorized_keys"檔案中。用到的命令如下:

ssh-keygen –t dsa–P ''

cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys

接著是用命令"scp"複製"datanode"的公鑰"id_dsa.pub"到"namenode"的"/home/hadoop/"目錄下,並追加到"namenode"的"authorized_keys"中。

在"namenode"伺服器的操作

用到的命令如下:

cat id_dsa.pub >> authorized_keys

然後刪除掉剛才複製過來的"id_rsa.pub"檔案。

最後是測試從"datanode"到"namenode"無密碼登入。

然後剩餘機器同樣的配置。

相關文章