资讯专栏INFORMATION COLUMN

虚拟机中CentOS直接实现SSH无密码验证

gityuan / 2500人阅读

摘要:最近被老师派了个任务要搭建虚拟集群于是摸索着各种教程一点一点地进行着记录一下自己在三台虚拟机间实现无密码验证的过程给自己的知识普及为的缩写,由的网络工作小组所制定为建立在应用层和传输层基础上的安全协议。

最近被老师派了个任务要搭建虚拟集群 于是摸索着各种教程一点一点地进行着
记录一下自己在三台虚拟机间实现ssh无密码验证的过程

给自己的知识普及:
SSH
SSH 为 Secure Shell 的缩写,由 IETF 的网络工作小组(Network Working Group)所制定;SSH 为建立在应用层和传输层基础上的安全协议。SSH 是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。

目标:
实现自己同一台电脑内的三台虚拟机相互之间能够无密码登录,(最终希望希望实现虚拟集群的搭建)

集群包括三个节点 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 ipaddr

/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
说明没启动

启动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

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/17345.html

相关文章

发表评论

0条评论

gityuan

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<