Linux局域网内,使用堡垒机中的运维账号推送公钥到可以ping通的所有机器上,实现ssh免密登录

前提:主机ip和密码文件已经提供,并且ip和密码保证正确,格式如下:

192.168.107.182:123456

192.168.107.183:123456

192.168.107.184:123456

Linux局域网内,使用运维账号推送公钥,实现ssh免密登录,本文实现方案分为两个步骤:

1、堡垒机管理员(root)账号,创建运维用户(我这里命名为master),安装expect软件包(用于ssh免密登录交互)。

2、使用运维账号登录堡垒机,使用运维账号推送公钥到局域网可ping通的所有服务器,并把能或不能ping通的服务器ip分别输出到文件。

shell具体实现如下:

堡垒机管理员(root)账号操作

1、编辑normal.sh脚本

[root@k8s-master shell]# vim normal.sh

#!/bin/env bash
#目标堡垒机上使用 master 用户批量推送公钥
#判断堡垒机上 master 账号是否存在

{
id master

#如果master用户不存在,创建该用户
[ $? -ne 0 ] && useradd master && echo 123456|pwsswd --stdin master
} &> /dev/null

#判断是否安装expect,用于交互
rpm -q expect
[ $? -ne 0 ] && yum -y install expect && echo "expect安装成功!"

2、为normal.sh脚本赋予可执行权限

[root@k8s-master shell]# chmod +x normal.sh 

3、执行normal.sh脚本

[root@k8s-master shell]# ./normal.sh

 

堡垒机运维账号(master)操作

1、使用master登录堡垒机

[root@k8s-master shell]# su - master
上一次登录:四 12月  5 10:00:01 CST 2019pts/0 上

2、存放服务器ip及密码信息的文件如下

[master@k8s-master ~]$ ll

-rw-r--r--. 1 master master  87 12月  5 10:40 ip.txt

[master@k8s-master ~]$ cat ip.txt 
192.168.107.182:123456
192.168.107.183:123456
192.168.107.184:123456

3、编写push_publish_key.sh脚本

[master@k8s-master ~]$ vim push_publish_key.sh 

#!/bin/env bash

#描述:实现在堡垒机上使用 master 用户批量推送公钥到局域网内所有可以ping通的机器(多线程)

#执行命令:./push_publish_key.sh

#!/bin/env bash
start_time=`date +%c` #定义脚本运行的开始时间
echo "开始时间:$start_time"
#定义master家目录
home_dir=/home/master
#判断master用户公钥是否存在,如果不存在创建
[ ! -f $home_dir/.ssh/id_rsa.pub ] && ssh-keygen -P "" -f $home_dir/.ssh/id_rsa &>/dev/null

#循环检查主机的网络并进行公钥推送
#服务器信息存放文件
ip_file=$home_dir/ip.txt
#能被ping通的服务器存放文件
ip_up=$home_dir/ip_up.txt
#不能被ping通的服务器存放文件
ip_down=$home_dir/ip_down.txt

for i in `cat $ip_file`
do
{
        ip=`echo $i|cut -d: -f1`
        pass=`echo $i|cut -d: -f2`
        ping -c1 $ip &>/dev/null
        if [ $? -eq 0 ];then
                #如果能ping通,保存ip
                echo $ip >> $ip_up
                #调用expect交互
                /usr/bin/expect <<-END &>/dev/null
                set timeout 10
                spawn ssh-copy-id -i $home_dir/.ssh/id_rsa.pub root@$ip
                expect {
                        "(yes/no)?" { send "yes\r";exp_continue }
                        "password:" { send "$pass\r" }
                        }
                expect eof
                END
                #验证
                remote_ip=`tail -1 ~/ip_up.txt`
                ssh root@$remote_ip echo "$remote_ip服务器推送公钥成功!"
        else
                echo $ip >> $ip_down
        fi
}&
done
wait
end_time=`date +%c`  #定义脚本运行的结束时间
echo "结束时间:$end_time"

4、为push_publish_key.sh脚本赋予可执行权限

[master@k8s-master ~]$ chmod +x push_publish_key.sh

5、执行push_publish_key.sh脚本

[master@k8s-master ~]$ ./push_publish_key.sh 
开始时间:2019年12月05日 星期四 12时15分38秒
192.168.107.183服务器推送公钥成功!
192.168.107.183服务器推送公钥成功!
结束时间:2019年12月05日 星期四 12时15分48秒

6、查看ip_up.txt和ip_down.txt文件

[master@k8s-master ~]$ cat ip_up.txt 
192.168.107.182
192.168.107.183

[master@k8s-master ~]$ cat ip_down.txt 
192.168.103.164

7、堡垒机使用master账号ssh连接成功推送公钥的服务器

[master@k8s-master ~]$ ssh root@192.168.107.183
Last login: Thu Dec  5 10:42:40 2019 from k8s-master

8、成功实现公钥推送,免密登录

 

 

 

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在Linux实现SSH免密登录,你可以按照以下步骤进行操作: 1. 生成SSH密钥对:在本地计算机上打开终端,并运行以下命令生成密钥对: ``` ssh-keygen -t rsa ``` 这将生成一个RSA密钥对,包括公钥和私钥。你可以选择使用默认的密钥保存路径和文件名,或者根据需要进行自定义。 2. 将公钥复制到目标服务器:将公钥复制到你希望免密登录的目标服务器上。可以使用以下命令将公钥复制到远程服务器: ``` ssh-copy-id username@remote_host ``` 替换 `username` 为你的目标服务器用户名,`remote_host` 为目标服务器的IP地址或域名。 如果 `ssh-copy-id` 命令不可用,你可以手动复制公钥文件的内容到目标服务器的 `~/.ssh/authorized_keys` 文件。 3. 配置SSH服务器:确保目标服务器上的SSH服务器已正确配置以允许密钥登录。打开目标服务器上的SSH配置文件 `/etc/ssh/sshd_config`: ``` sudo vi /etc/ssh/sshd_config ``` 确保以下配置项被启用: ``` PubkeyAuthentication yes PasswordAuthentication no ``` 4. 重新启动SSH服务:保存并关闭SSH配置文件后,使用以下命令重新启动SSH服务: ``` sudo service ssh restart ``` 或者,如果你的系统使用 `systemd`,可以使用以下命令: ``` sudo systemctl restart sshd 5. 测试免密登录:现在,你可以尝试使用SSH连接到目标服务器,如果一切设置正确,你应该无需输入密码即可成功登录: ``` ssh username@remote_host ``` 替换 `username` 为你的目标服务器用户名,`remote_host` 为目标服务器的IP地址或域名。 这样,你就成功实现了在Linux上的SSH免密登录。请记得保护好私钥文件,不要泄露给他人,以确保系统的安全性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值