使用脚本实现多台虚拟机之间实现免密登录

简介

两个任务

  • 虚拟机之间的root用户免密
  • 虚拟机之间的普通用户免密
    前期工作:
    拥有4台虚拟机且前期工作已经做好 — 4台虚拟机已可以ping通外网
    这里主机名分别为hadoop100 hadoop102 hadoop103 hadoop104

一、给不同虚拟机之间的root用户做免密登录

操作步骤 — 写脚本进行实现(想要都互通就需要在每一台机器都执行脚本)

— 都是在root目录下创建的两个脚本

  1. 安装expect软件
[root@hadoop102 ~]# yum -y install expect
  1. 编写脚本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
  1. 编写脚本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. 启动脚本 — 只用启动第二个脚本就可以来

    1. 1先设置成所有人都可以执行
[root@hadoop100 ~]# chmod a+x startAutoSSH.sh
  1. 2 启动脚本格式 — sh startAutoSSH.sh 后面为需要设置的主机名,用空格分割
    注意:这里可以直接连续写4个主机命是因为root密码一样,如果不一样需要分别修改root密码然后启动
[root@hadoop102 ~]# sh startAutoSSH.sh hadoop100 hadoop102 hadoop103 hadoop104

  1. 验证
    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 ~]$

侵权联系删除,小生这厢有礼了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值