虛擬機中CentOS直接實現SSH無密碼驗證

最近被老師派了個任務要搭建虛擬集羣 因而摸索着各類教程一點一點地進行着
記錄一下本身在三臺虛擬機間實現ssh無密碼驗證的過程linux

給本身的知識普及:
SSH
SSH 爲 Secure Shell 的縮寫,由 IETF 的網絡工做小組(Network Working Group)所制定;SSH 爲創建在應用層和傳輸層基礎上的安全協議。SSH 是目前較可靠,專爲遠程登陸會話和其餘網絡服務提供安全性的協議。利用 SSH 協議能夠有效防止遠程管理過程當中的信息泄露問題。算法

目標:
實現本身同一臺電腦內的三臺虛擬機相互之間可以無密碼登陸,(最終但願但願實現虛擬集羣的搭建)vim

集羣包括三個節點 master slave1 slave2 能夠相互ping通
ip分別爲192.168.224.100 192.168.224.201 192.168.224.202 //沿用了網上教程使用的ip
全部節點均是CentOS 6.5 x64 系統安全

/1 建立虛擬機並配置網絡
首先建立一臺虛擬機,其hostname爲master
//1 關閉防火牆
# /sbin/service iptables stop;chkconfig --level 35 iptables off
//2 關閉SELINUX //令SELINUX=disabled
# vim /etc/selinux/config
//3 使用hostname命令查看hostname //簡直廢話..
# hostname
修改hostname //第一行爲NETWORKING=yes 修改第二行HOSTNAME=master
# vim /etc/sysconfig/network
//4 修改ip地址爲靜態 //可能不存在下面的文件 可用ifconfig查看如今的ip
# vim /etc/sysconfig/network-scripts/ifconfig-eth0
並修改爲以下內容
DEVICE=eth1
HWADDR=00:...... //硬件地址 ifconfig
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=static
BROADCAST=192.168.224.225 //
IPADDR=192.168.224.100 //
NETMASK=255.255.255.0
NETWORK=192.168.224.0 //
GATEWAY=192.168.224.2 //彷佛能夠直接在虛擬機設置中設置
//5 修改hosts映射 //下爲例,格式爲 ip hostname
192.168.224.100 master
192.168.224.201 slave1
192.168.224.202 slave2
隨後執行 service network restart 重啓網絡網絡

/2 複製虛擬機
去Virtual Machines直接複製虛擬機,重命名爲slave1 slave2
打開虛擬機,此時須要分別將其ip修改成以前規劃好的ip,利用ifconfig查看當前的硬件地址,修改ifconfig-eth0中相應內容
# vim /etc/sysconfig/network-scripts/ifconfig-eth0
修改hostname
# vim /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=slave1 //or slave2數據結構

最後,檢查下hosts文件的內容 cat /etc/hosts //我的強迫症..
分別修改各個slave後重啓
# reboot併發

此時不妨測試下各個節點間是否能ping通..
$ ping hostname
or
$ ping ipaddrssh

/3 配置ssh
確保本身安裝了OpenSSH //據查CentOS默認安裝OpenSSH,親測可信
查看sshd是否已是系統服務
# chkconfig --list |grep sshd
若顯示
sshd 0:off 1:off 2:off 3:off 4:off 5:off 6:off
說明沒啓動oop

啓動ssh服務
$ /etc/init.d/sshd start
或 設置ssh爲開機自動啓動
# chkconfig --level 35 sshd on
讓我來溫習下ssh的原理:
節點A要實現無密碼公鑰認證鏈接到節點B上時,節點A是客戶端,節點B是服務端,須要在客戶端A上生成一個密鑰對,包括一個公鑰和一個私鑰,然後將公鑰複製到服務端B上。當客戶端A經過ssh鏈接服務端B時,服務端B就會生成一個隨機數並用客戶端A的公鑰對隨機數進行加密,併發送給客戶端A。客戶端A收到加密數以後再用私鑰進行解密,並將解密數回傳給B,B確認解密數無誤以後就容許A進行鏈接了。這就是一個公鑰認證過程,其間不須要用戶手工輸入密碼。重要過程是將客戶端A公鑰複製到B上。
在這裏,就是將slave1 slave2上的公鑰放到master上測試

開始配置
//1 修改ssh配置文件
$ vim /etc/ssh/sshd_config
找到下列行 去掉註釋負號#
RSAAuthentication yes //字面意思..容許RSA認證
PubkeyAuthentication yes //容許公鑰認證
AuthorizedKeysFile .ssh/authorized_keys //公鑰存放在.ssh/au..文件中

修改後須要重啓ssh
$ /sbin/servive sshd restart

此時應該已經能夠用ssh來登陸其餘節點了
$ ssh hostname //須要輸入密碼 廢講..

//2 在全部虛擬機上生成密碼對 //RSA是一直公鑰加密算法
$ ssh-keygen -t rsa //直接回車幾回,可在默認路徑~/.ssh/下生成私鑰id_rsa公鑰id_rsa.pub

//3 將全部虛擬機的公鑰傳送到一塊兒
目的是生成一個authorized_keys文件,包含全部機器的公鑰內容,不妨將公鑰都發送到master上
使用scp命令
$ scp id_rsa.pub ****@master:/home/****/.ssh/ id_rsa.pub.slave1 //名字無所謂啦知道是哪一個slave就好,各個slave同理
注:scp即是利用ssh在linux主機間傳送文件,若出現Host key verification failed.
參照http://blog.csdn.net/pointfish/article/details/7025932

//4 生成authorized_keys
進入master檢查下公鑰是否正常傳送過來了
因此如今在master的/etc/home/****用戶名啊/.ssh/ 下應有id_rsa.pub.slave1/2和master本身的pub
$ cd ~/.ssh/
$ cat id_rsa.pub >> authorized_keys //本身的
$ cat id_rsa.pub.slave1 >> authorized_keys
$ cat id_rsa.pub.slave2 >> authorized_keys //兩個slave的
給authorized_keys修改權限
# chmod 644 authorized_keys //600彷佛就好了
此時的authorized_keys文件即是通向這三個節點的鑰匙了//好中二..
利用scp把該文件傳送到兩個slave的.ssh/下
# scp authorized_keys ****@slave1:/home/****/.ssh/authorized_keys
# scp authorized_keys ****@slave2:/home/****/.ssh/authorized_keys

done! 如今只要是有authorized_keys文件的節點便能另兩個節點ssh登陸了,如在master中
# ssh slave1

初次寫文只爲之後能回顧,有錯還請指正.. 做爲一個還在上數據結構的學生,本身仍是太年輕了=-= 因爲最終目的是實現集羣,ssh只是一小步,彷佛還要繼續研究下Hadoop,努力吧//不懂啊QAQ

相關文章
相關標籤/搜索