转载:Linux全自动批量配置SSH免密

转载自 https://www.mr-mao.cn/archives/auto-configure-ssh-nopass-login.html

1、在主机的操作系统上安装expect

2、新建host_ip文件,内容格式如下

host_ip文件格式

复制代码
172.16.1.100  password
172.16.1.101  password
172.16.1.102  password
172.16.1.103  password
172.16.1.104  password
172.16.1.105  password
172.16.1.106  password
172.16.1.107  password
172.16.1.108  password
.....

脚本代码

复制代码
#!/bin/bash
#定义批量IP和密码 for循环执行批量命令
for row in `cat host_ip | awk '{printf("%s:%s:%s\n"),$1,$2,$3}'`
  do
ip=`echo ${row} | awk -F ':' '{print $1}'`
password=`echo ${row} | awk -F ':' '{print $2}'`
#在列出的所有的主机上生成密钥对
/usr/bin/expect <<-EOF
spawn ssh root@$ip ssh-keygen -t rsa
expect {
        "yes/no" {send "yes\r";exp_continue}
        "password: " {send "$password\r";exp_continue}
    "/root/.ssh/id_rsa" {send "\r";exp_continue}
    "empty for no passphrase" {send "\r";exp_continue}
    "again" {send "\r";exp_continue}
             }
exit
EOF
#如果只是管理机无密登录,使用此步
#/usr/bin/expect <<-EOF
#spawn ssh-copy-id -i /root/.ssh/id_rsa.pub $ip
#expect {
#        "yes/no" {send "yes\r";exp_continue}
#        "password: " {send "$password\r";exp_continue}
#    }
#EOF

#把列出的所有的主机的公钥复制到本地
/usr/bin/expect <<-EOF
spawn scp root@$ip:/root/.ssh/id_rsa.pub /root/.ssh/id_rsa.pub_$ip
expect {
                "yes/no" {send "yes\r";exp_continue}
                "password: " {send "$password\r";exp_continue}
    }
EOF
done
#如果只是管理机无密登录,使用此步
#localip=`ip a s |grep inet|grep -v 127.0.0.1|grep -v inet6|awk '{print $2}'|tr -d "addr:"|grep -o '[0-9]\+\.[0-9]\+\.[0-9]\+\.[0-9]\+'`
#rm -rf ~/.ssh/id_rsa.pub_$localip
#把所有主机的公钥拷贝到密钥key
cat /root/.ssh/id_rsa.pub_* >> /root/.ssh/authorized_keys
for row in `cat host_ip | awk '{printf("%s:%s:%s\n"),$1,$2,$3}'`
  do
ip=`echo ${row} | awk -F ':' '{print $1}'`
password=`echo ${row} | awk -F ':' '{print $2}'`

#把含有所有主机公钥的密钥key复制到所有的主机
/usr/bin/expect <<-EOF
spawn scp /root/.ssh/authorized_keys root@$ip:/root/.ssh/
expect {
                "yes/no" { send "yes\r";exp_continue}
                "password: " {send "$password\r";exp_continue}
        }
EOF
#复制hosts文件到所有主机
/usr/bin/expect <<-EOF
spawn scp /etc/hosts root@$ip:/etc/
expect {
                "yes/no" { send "yes\r";exp_continue}
                "password: " {send "$password\r";exp_continue}
        }
EOF
done
相关推荐
ding_zhikai30 分钟前
SD:在一个 Ubuntu 系统安装 stable diffusion ComfyUI
linux·ubuntu·stable diffusion
饥饿的半导体36 分钟前
网络协议工程 - eNSP及相关软件安装 - [eNSP, VirtualBox, WinPcap, Wireshark, Win7]
网络·网络协议·wireshark
似水এ᭄往昔1 小时前
【Linux】——基础指令(下)
linux·服务器
大锦终1 小时前
【Linux】udp网络程序
linux·运维·服务器·网络
罗政1 小时前
【免费】轻量级服务器centos监控程序+内存+cpu+nginx+适合小型站长使用
服务器·nginx·centos
white-persist1 小时前
JWT 漏洞全解析:从原理到实战
前端·网络·python·安全·web安全·网络安全·系统安全
数据与人工智能律师2 小时前
解码Web3:DeFi、GameFi、SocialFi的法律风险警示与合规路径
大数据·网络·人工智能·云计算·区块链
CryptoRzz2 小时前
欧美(美股、加拿大股票、墨西哥股票)股票数据接口文档
java·服务器·开发语言·数据库·区块链
xingxing_F2 小时前
Network Radar for Mac 网络扫描管理软件
网络·macos
arvin_xiaoting2 小时前
#zsh# #Ubuntu# 一键安装zsh、oh-my-zsh、常用插件
linux·ubuntu·elasticsearch