CentOS 配置SSH免密码登陆

配置SSH无登陆验证,在很多场景下是非常方便的,尤其是在管理大型集群服务时,避免了繁琐的密码验证,在安全级别越高的服务器上,通常密码的设置更复杂,配置SSH,不仅可以用密钥保证节点间通信的安全性,同时也降低了频繁输入密码登陆的耗时,大大提高了管理效率。散仙写此篇文章,也是给准备入手Hadoop的道友们先做好一个基础的准备,当然你也可以不配置SSH,只要你愿意频繁输入Slave节点的密码来登陆。

配置SSH无登陆验证,在很多场景下是非常方便的,尤其是在管理大型集群服务时,避免了繁琐的密码验证,在安全级别越高的服务器上,通常密码的设置更复杂,配置SSH,不仅可以用密钥保证节点间通信的安全性,同时也降低了频繁输入密码登陆的耗时,大大提高了管理效率。

SSH无密码验证的原理 

Master作为客户端,要实现无密码公钥认证,连接到服务器Slave上时,需要在Master上生成一个密钥对,包括一个公钥和一个私钥,而后将公钥复制到所有的Slave上。当Master通过SSH链接到Slave上时,Slave会生成一个随机数并用Master的公钥对随机数进行加密,并发送给Master。Master收到加密数之后再用私钥解密,并将解密数回传给Slave,Slave确认解密数无误之后就允许Master进行连接了。这就是一个公钥认证过程,期间不需要手工输入密码,重要的过程是将Master上产生的公钥复制到Slave上。 原理如下图:

SSH免密码登录实现原理

SSH无密码登陆的几种关系

通常情况下,一个集群服务下至少有一个Master和若干个Slave,那么无密码登陆通常指的是由Master到任意一个Slave的无验证的单向登陆,意思就是只能从Master登陆到Slave是不需要密码的,但是如果你想从Slave无验证登陆到Master,或者你想在Slave与Slave之间进行无验证登陆,这些都是不可行的,除非,你进行了密钥对的双向验证,才可以双向登陆。

我们考虑双向登录,下图是Master到Slave机器的单向登陆配置流程,如下:

SSH无密码登录流程图


配置详细流程

第一步、配置Master和Slave主机名和host文件

假如主机名和IP地址的对应关系如下表:

主机名IP地址
Master192.168.1.100
Slave192.168.1.101

使用root用户分别对192.168.1.100和192.168.1.101的主机名分别设置为Master和Slave,如下:

[root@localhost] $ vi /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=Master

同理,设置Slave主机。

修改host文件,设置ip和主机名称的映射关系。如下:

[root@localhost /]# vi /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
# 下面是我们添加的
192.168.1.100 Master
192.168.1.101 Slave

同理,在另一台机器上面进行设置。

第二步、创建Hadoop用户

在Master和Slave机器上面创建hadoop用户,密码为hadoop,如下:

[root@Master ~]# adduser hadoop
[root@Master ~]# passwd hadoop
Changing password for user hadoop.
New password: 
BAD PASSWORD: it is based on a dictionary word
BAD PASSWORD: is too simple
Retype new password: 
passwd: all authentication tokens updated successfully.

同理,在Slave上面创建hadoop用户。

注意:下面步骤的操作都是在hadoop用户下面进行,除非需要修改配置文件。

第三步、配置客户端(Master)

首先,检测当前用户在.ssh目录下面是否存在,如下:

[hadoop@Master ~]$ ll -a .ssh
total 20
drwx------. 2 hadoop hadoop 4096 Jul  2 04:53 .
drwx------. 5 hadoop hadoop 4096 Jul  2 01:06 ..

从上面可知,当前用户下面的.ssh目录下面不存在id_rsa和id_rsa.pub文件。(注意:如果不存在.ssh文件,则手动创建.ssh文件即可)

其次,使用ssh-keygen生成密钥对文件,如下:

[hadoop@Master ~]$ ssh-keygen -t rsa -P ''
Generating public/private rsa key pair.
Enter file in which to save the key (/home/hadoop/.ssh/id_rsa): 
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:
18:f8:3a:c5:74:2d:90:ba:d6:ea:28:e1:82:f6:d1:7f hadoop@centos201
The key's randomart image is:
+--[ RSA 2048]----+
|      ..         |
|     ... .       |
|    ..o o .      |
|    .+ + .       |
|     o= S        |
|.   +o.          |
|o. ooo           |
|+o .o..  E       |
|o.oo.  ..        |
+-----------------+

如果在.ssh下面存在id_rsa和id_rsa.pub文件,则直接跳过上面生成密钥对的步骤。

然后,将id_rsa.pub文件拷贝到Slave服务器上面,如下:

[hadoop@Master ~]$ scp ~/.ssh/id_rsa.pub Slave:/home/hadoop/.ssh
The authenticity of host 'Slave (192.168.31.101)' can't be established.
RSA key fingerprint is 57:b0:d0:bf:17:92:9a:1d:0a:ac:75:55:5e:83:4c:c1.
Are you sure you want to continue connecting (yes/no)? yew^Hs^[[3~
Please type 'yes' or 'no': yes
Warning: Permanently added 'Slave, 192.168.31.101' (RSA) to the list of known hosts.
hadoop@Slave's password: 
id_rsa.pub                                                                                100%  398     0.4KB/s   00:00

第四步、配置服务端(Slave)

首先,查看当前(hadoop)用户下面是否存在.ssh目录,如下:

[hadoop@Slave .ssh]$ ll -a
total 16
drwx------. 2 hadoop hadoop 4096 Jul 12 16:32 .
drwx------. 5 hadoop hadoop 4096 Jul 12 15:49 ..
-rw-r--r--. 1 hadoop hadoop  398 Jul 12 16:31 id_rsa.pub

如果存在,则将id_rsa.pub文件拷贝到authorized_keys中,否则执行第三步,将id_rsa.pub拷贝到当前目录下面,如下:

[hadoop@Slave .ssh]$ cat id_rsa.pub >> authorized_keys
[hadoop@Slave .ssh]$ ll -a
total 16
drwx------. 2 hadoop hadoop 4096 Jul 12 16:32 .
drwx------. 5 hadoop hadoop 4096 Jul 12 15:49 ..
-rw-rw-r--. 1 hadoop hadoop  398 Jul 12 16:32 authorized_keys
-rw-r--r--. 1 hadoop hadoop  398 Jul 12 16:31 id_rsa.pub

其次,修改/etc/ssh/sshd_config配置文件,启用RSA公钥验证,如下:

[root@Slave /] $ vi /etc/ssh/sshd_config
# 将下面三行的注释去掉
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile      .ssh/authorized_keys

最后,重启SSHD服务,如下:

[root@Slave /] $ service sshd restart
Stopping sshd:                                             [  OK  ]
Starting sshd:                                             [  OK  ]

注意:

.ssh 文件的权限为700

authorized_keys 文件的权限为600

第五步、测试配置

客户机执行如下代码:

# -v 调试模式
[hadoop@Master /] $ ssh -v Slave

使用调试模式登录Slave会显示一些详细的登陆日志信息。若登陆失败,或者仍然要输入密码,可以在服务器查看日志文件:/var/log/secure。若登陆成功,则以后就可以直接使用如下命令登录,如下:

[hadoop@Master /] $ ssh Slave

直接登陆了,不用输入密码.

到这里就讲解完了,如有不正确地方,望指正。谢谢支持!!!!

学习知识要善于思考,思考,再思。我就是靠这个方法成为科学家的。 —— 爱因斯坦
0 不喜欢
说说我的看法 -
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号