一、安裝和啟動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. 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_rsa和id_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 | | . | +-----------------+ |
檢視"/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 * 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
[email protected]:~/上面的指令是複制檔案"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/ 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無密碼登入,下面就是重複上面的步驟把剩餘的兩台(Slave2和Slave3)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"無密碼登入。
然後剩餘機器同樣的配置。