在系统运维的时候,可能免密码通过ssh方式登录到远程主机,这时就首先需要将本机的公钥复制到远程主机,用 ssh-copy-id 命令可以轻松做到。

对于单台远程主机,直接使用命令就可以了

#  生成密钥
ssh-keygen -t rsa # 复制公钥到远程主机
ssh-copy-id username@host

而在生产中,一般我们拥有很多台主机,如果在一台一台的重复执行 ssh-copy-id username@host 的话,效率就极其低下,以下是结合 pssh 命令,在我们生产中使用的批量分发公钥到多台机器 ,希望能做到抛砖引玉

1. 新建hosts文件

[@bjyf_50_20 ansible]# cat host_test
10.160.9.162
10.160.24.163
[@bjyf_50_20 ansible]#

2. 分发公钥脚本

[@bjyf_50_20 ansible]# cat key.sh
#!/bin/bash
#
passwd=(
"123456"
"567890"
) PWD_IDX=$((${#passwd[@]}-1)) function usage(){
echo -e "\t\033[31m You entered an incorrent parameter \033[0m"
echo -e "\t\033[31m Such as: $(basename $0) iplist\033[0m"
exit 1
} function exec_ip(){
sort -g ${INPUT_IP_FILE} > not_check_ip
for i in $(seq 0 $PWD_IDX)
do
if [ ! -s not_check_ip ];then
continue
fi
sshpass -p"${passwd[$i]}" pssh -iAh not_check_ip -l root -p 100 -O StrictHostKeyChecking=no -t 5 "whoami" \
|grep SUCCESS \
|awk '{print $NF}' \
|sort -g>ip.$i
grep -vFf ip.$i not_check_ip |sort -g > not_check_ip.tmp
mv not_check_ip.tmp not_check_ip
done
} function exec_key(){
for i in $(seq 0 ${PWD_IDX})
do
if [ ! -e ip.$i ];then
break
fi
if [ -e ip.$i -a $(wc -l ip.$i|awk '{print $1}') -gt 0 ];then
echo "---------------------------------------------------"
for ip in $(cat ip.$i)
do
arg="ssh-copy-id -i /root/.ssh/id_rsa.pub -o StrictHostKeyChecking=no root@$ip"
echo "sshpass -p${passwd[$i]} ${arg}"
sshpass -p${passwd[$i]} ${arg}
done
fi
done
}
if [ $# -lt 1 ];then
usage
fi
INPUT_IP_FILE=$1
exec_ip
exec_key
rm -f ip.*
[@bjyf_50_20 ansible]#

3. 执行脚本

[@bjyf_50_20 ansible]#sh -x key.sh host_test

生产中使用ssh-copy-id复制公钥到多台服务器的更多相关文章

  1. 利用ssh-copy-id复制公钥到多台服务器

    http://www.cnblogs.com/panchong/p/6027138.html?utm_source=itdadao&utm_medium=referral # 连接新主机时,不 ...

  2. [转]linux将一个服务器上的文件或者文件夹复制到另一台服务器上

    本文转载自<linux 将一个服务器上的文件或者文件夹复制到另一台服务器上>,有时间实践一把 使用scp将一个Linux系统中的文件或文件夹复制到另一台Linux服务器上 复制文件或文件夹 ...

  3. ssh配置互信不成功,两台服务器有一台需要输入密码

    在客户现场,某国产平台,配置机器互信时发现,A可以免密访问B,而B不能免密访问A,且B不能免密访问B,进行了下面的几个处理后搞定. 1)确定目录权限:/root/ 755/root/.ssh 700/ ...

  4. linux 将一个服务器上的文件或者文件夹复制到另一台服务器上

    使用scp将一个Linux系统中的文件或文件夹复制到另一台Linux服务器上 复制文件或文件夹(目录)命令:  一.复制文件:  (1)将本地文件拷贝到远程  scp 文件名 用户名@计算机IP或者计 ...

  5. 拷贝ssh公钥到多台服务器上

    这篇文章几乎是对Push SSH public keys to multiple host的翻译,谢谢该作者. 使用SSH登陆.执行命令到远程机器需要输入密码,很多系统需要免输密码访问远程机器,比如h ...

  6. 定时备份SQL SERVER的数据库并且把备份文件复制到另外一台服务器

    需求介绍:每天备份线上正式库并且把备份文件复制到测试服务器,测试服务器自动把数据库备份文件还原. 方案介绍: 第1步:在正式库上创建存储过程用来备份数据库和复制到测试服务器,然后新建作业每天定时执行创 ...

  7. git 要求密码的解决方法:【生成gitLab公钥】:以及如何配置GitLab中的SSH key

    参考链接: https://www.cnblogs.com/yjlch1016/p/9692840.html https://blog.csdn.net/u011925641/article/deta ...

  8. git中的ssh和https方式的使用(gitee为例)

    在使用git管理代码,或者使用github,国内的码云(gitee)的时候,有两种方式可以使用,分别是https和ssh,以下均使用gitee为例. ssh方式 配置ssh,如果不配置ssh的话,cl ...

  9. 如何在ubuntu中启用SSH服务

    如何在ubuntu14.04 中启用SSH服务 开篇科普:  SSH 为 Secure Shell 的缩写,由 IETF 的网络工作小组(Network Working Group)所制定:SSH 为 ...

随机推荐

  1. 高级数据结构之 BloomFilter

    高级数据结构之 BloomFilter 布隆过滤器 https://en.wikipedia.org/wiki/Bloom_filter A Bloom filter is a space-effic ...

  2. js & object & prototype & __proto__ & prototype chain

    js & object & prototype & proto & prototype chain constructor prototype === instance ...

  3. js {}与class属性描述符的区别

    let data = { name: "ajanuw", change() { this.name = "Ajanuw"; }, get message() { ...

  4. Docker Tips: 关于/var/run/docker.sock

    本文转载自Docker Tips: 关于/var/run/docker.sock 导语 你可能已经运行过docker hub上的container并且注意到其中的一些需要绑定挂载(mount)/var ...

  5. java荷兰国旗问题

    荷兰国旗包含三种颜色:红.白.蓝. 有三种颜色的球,算法的目标是将这三种球按颜色顺序正确地排列.它其实是三向切分快速排序的一种变种,在三向切分快速排序中,每次切分都将数组分成三个区间:小于切分元素.等 ...

  6. H5跳转app代码

    不罗嗦直接上代码 <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...

  7. redis环境配置

    1.解压redis压缩包 tar -zxvf redis-5.0.7 2. 基本环境安装 进入解压后的目录 安装yum(cents需要 其它版本Linux可能不适用yum用其它工具)ubuntu:ap ...

  8. Docker Elasticsearch 集群配置

    一:选用ES原因 公司项目有些mysql的表数据已经超过5百万了,各种业务的查询入库压力已经凸显出来,初步打算将一个月前的数据迁移到ES中,mysql的老数据就物理删除掉. 首先是ES使用起来比较方便 ...

  9. win10 查看已保存的wifi密码

    netsh wlan show profile name="WIFINAME-Test" key=clear   C:\windows\system32> C:\window ...

  10. Jmeter的脚本参数化

    一.变量 Jmeter中的变量用法:${变量名称} 变量定义:两种 1.用户定义变量 User Defined Variables 2.用户参数  User Parameters 1.1用户定义变量 ...