虚拟机中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

相关文章
相关标签/搜索