简介
两个任务
- 虚拟机之间的root用户免密
- 虚拟机之间的普通用户免密
前期工作:
拥有4台虚拟机且前期工作已经做好 — 4台虚拟机已可以ping通外网
这里主机名分别为hadoop100 hadoop102 hadoop103 hadoop104
一、给不同虚拟机之间的root用户做免密登录
操作步骤 — 写脚本进行实现(想要都互通就需要在每一台机器都执行脚本)
— 都是在root目录下创建的两个脚本
- 安装expect软件
[root@hadoop102 ~]# yum -y install expect
- 编写脚本1 — autoSSH.sh
功能:
该脚本能自动给当前运行的节点生成公钥私钥对
该脚本能自动把自己的公钥文件内容追加到其他服务器的授权列表文件 authorized_keys 中去
创建脚本:(以第一台虚拟机hadoop100为示范)
##使用vim命令创建脚本
[root@hadoop100 ~]# vim autoSSH.sh
脚本内容:
注意:在第8行BASE_PASSWORD=“rootPasswd” —> 这里的root需要写自己的root用户密码
#!/bin/bash
## 脚本接收的参数,也就是要互相配置 SSH 免密登录的服务器列表参数
BASE_HOST_LIST=$*
## 密码,默认用户是当前运行脚本的用户,比如 root 用户
## 这里改成你的用户对应的密码
BASE_PASSWORD="root"
## shell 函数:模拟 SSH 公钥私钥文件生成的人机交互过程
sshkeygen(){
expect -c "
spawn ssh-keygen
expect {
\"ssh/id_rsa):\" {send \"\r\";exp_continue}
\"passphrase):\" {send \"\r\";exp_continue}
\"again:\" {send \"\r\";exp_continue}
}
"
}
## shell 函数:模拟配置 SSH 免密登录过程的人机交互过程
sshcopyid(){
expect -c "
spawn ssh-copy-id $1
expect {
\"(yes/no)?\" {send \"yes\r\";exp_continue}
\"password:\" {send \"$2\r\";exp_continue}
}
"
}
## 本机生成密钥对
sshkeygen
## 然后本机跟其他服务器建立 SSH 免密登录(包括自己)
for SSH_HOST in ${BASE_HOST_LIST}
do
sshcopyid ${SSH_HOST} ${BASE_PASSWORD}
done
-
编写脚本2 — startAutoSSH.sh
功能:启动第一个脚本进行自动的免密操作
#!/bin/bash
## 配置 SSH 免密登录的服务器列表,可写死,也可通过传参或者读配置文件的方式读取格式
#BASE_HOST_LIST="hadoop100 hadoop102 hadoop103 hadoop104"
BASE_HOST_LIST=$*
## 脚本的放置目录(传送之前,和传送之后都是这个目录)
SCRIPT_PATH="/root/autoSSH.sh"
## 第一步:先让自己先跑 autoSSH.sh 脚本,为了能顺利发送脚本到集群各节点
sh ${SCRIPT_PATH} ${BASE_HOST_LIST}
## 第二步:把脚本发送给其他服务器,让其他服务器也执行该脚本
for SSH_HOST in $BASE_HOST_LIST
do
## first : send install script
## 注意这行,用户名写死为root,如果是其他用户,记得在这里修改
scp -r $SCRIPT_PATH root@${SSH_HOST}:$SCRIPT_PATH
## send command and generate ssh and auto ssh
ssh ${SSH_HOST} sh ${SCRIPT_PATH} ${BASE_HOST_LIST}
done
-
启动脚本 — 只用启动第二个脚本就可以来
- 1先设置成所有人都可以执行
[root@hadoop100 ~]# chmod a+x startAutoSSH.sh
- 2 启动脚本格式 — sh startAutoSSH.sh 后面为需要设置的主机名,用空格分割
注意:这里可以直接连续写4个主机命是因为root密码一样,如果不一样需要分别修改root密码然后启动
[root@hadoop102 ~]# sh startAutoSSH.sh hadoop100 hadoop102 hadoop103 hadoop104
- 验证
5.2.每一个主机的/root/.ssh目录下可以查看到authorized_keys文件
[root@hadoop103 ~]# ll /root/.ssh/
total 16
-rw-r--r--. 1 root root 1584 Sep 12 18:41 authorized_keys
-rw-------. 1 root root 1675 Sep 12 17:54 id_rsa
-rw-r--r--. 1 root root 396 Sep 12 17:54 id_rsa.pub
-rw-r--r--. 1 root root 744 Sep 12 18:41 known_hosts
5.2. 登录其他主机看是否可以免密登录
[root@hadoop102 ~]# ssh hadoop103
Last login: Fri Sep 13 08:40:14 2024 from 192.168.10.1 ##这样子就算成功了
[root@hadoop103 ~]#
注意:如果不成功可以尝试重启sshd服务
[root@hadoop102 ~]# systemctl restart sshd
二、给不同虚拟机之间的普通用户做免密登录
— 这里使用的是user用户
注意:下面的步骤每一台都要执行,全部执行完一步后再进行下一步
步骤
1. 使用root用户给所用普通用户授权
#进入修改的配置文件
[root@hadoop100 ~]# visudo
#在文件最后一行输入,(user是要设置的用户名)
user ALL=(ALL) NOPASSWD:ALL
#保存退出,重启sshd服务
[root@hadoop100 ~]# systemctl restart sshd
2. 生成SSH密钥:
[user@hadoop100 ~]$ ssh-keygen -t rsa
执行命令后连续按4个回车,出现下图所示就算成功:
3. 复制公钥:将公钥复制到每台虚拟机上对应用户的~/.ssh/authorized_keys文件中。
- 通过ssh-copy-id -i ~/.ssh/id_rsa.pub
用户名@目标主机命令完成,其中“用户名”是目标虚拟机上的用户名,“目标主机”是目标虚拟机的IP地址或主机名。
[user@hadoop100 ~]$ ssh-copy-id -i ~/.ssh/id_rsa.pub user1@hadoop102
后面有选中[yes/no]的输入yes
4. 设置权限:确保每台虚拟机上用户的~/.ssh目录和authorized_keys文件的权限正确设置。
[user@hadoop100 ~]$ chmod 700 ~/.ssh/ ##设置~/.ssh目录权限
[user@hadoop100 ~]$ chmod 600 ~/.ssh/authorized_keys ##设置authorized_keys文件的权限
5. 配置SSH服务:
- 确保每台虚拟机上的SSH服务配置文件/etc/ssh/sshd_config中PubkeyAuthentication选项被设置为yes,以启用公钥认证。
注意:在这里使用普通用户的权限是不行的,所以我们要使用前面设置的特权,使用sudo命令
[user@hadoop100 ~]$ sudo vim /etc/ssh/sshd_config #打开不会是空文件
#找到PubkeyAuthentication这一行,将#号删除,设置为yes
PubkeyAuthentication yes
5. 重启SSH服务:
[user@hadoop100 ~]$ sudo systemctl restart sshd
6. 测试免密登录:从一台虚拟机尝试SSH到另一台虚拟机,如果配置正确,是不需要输入密码的。
[user@hadoop100 ~]$ ssh user1@hadoop102
Last login: Sat Sep 14 02:08:35 2024 from hadoop100
[user1@hadoop102 ~]$
侵权联系删除,小生这厢有礼了