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

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

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

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

1. 新建hosts文件

  1. [@bjyf_50_20 ansible]# cat host_test
  2. 10.160.9.162
  3. 10.160.24.163
  4. [@bjyf_50_20 ansible]#

2. 分发公钥脚本

  1. [@bjyf_50_20 ansible]# cat key.sh
  2. #!/bin/bash
  3. #
  4. passwd=(
  5. "123456"
  6. "567890"
  7. )
  8. PWD_IDX=$((${#passwd[@]}-1))
  9. function usage(){
  10. echo -e "\t\033[31m You entered an incorrent parameter \033[0m"
  11. echo -e "\t\033[31m Such as: $(basename $0) iplist\033[0m"
  12. exit 1
  13. }
  14. function exec_ip(){
  15. sort -g ${INPUT_IP_FILE} > not_check_ip
  16. for i in $(seq 0 $PWD_IDX)
  17. do
  18. if [ ! -s not_check_ip ];then
  19. continue
  20. fi
  21. sshpass -p"${passwd[$i]}" pssh -iAh not_check_ip -l root -p 100 -O StrictHostKeyChecking=no -t 5 "whoami" \
  22. |grep SUCCESS \
  23. |awk '{print $NF}' \
  24. |sort -g>ip.$i
  25. grep -vFf ip.$i not_check_ip |sort -g > not_check_ip.tmp
  26. mv not_check_ip.tmp not_check_ip
  27. done
  28. }
  29. function exec_key(){
  30. for i in $(seq 0 ${PWD_IDX})
  31. do
  32. if [ ! -e ip.$i ];then
  33. break
  34. fi
  35. if [ -e ip.$i -a $(wc -l ip.$i|awk '{print $1}') -gt 0 ];then
  36. echo "---------------------------------------------------"
  37. for ip in $(cat ip.$i)
  38. do
  39. arg="ssh-copy-id -i /root/.ssh/id_rsa.pub -o StrictHostKeyChecking=no root@$ip"
  40. echo "sshpass -p${passwd[$i]} ${arg}"
  41. sshpass -p${passwd[$i]} ${arg}
  42. done
  43. fi
  44. done
  45. }
  46. if [ $# -lt 1 ];then
  47. usage
  48. fi
  49. INPUT_IP_FILE=$1
  50. exec_ip
  51. exec_key
  52. rm -f ip.*
  53. [@bjyf_50_20 ansible]#

3. 执行脚本

  1. [@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. svg & regex

    svg & regex https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reg ...

  2. nasm astrrchr函数 x86

    xxx.asm %define p1 ebp+8 %define p2 ebp+12 %define p3 ebp+16 section .text global dllmain export ast ...

  3. asm movbe 指令

    movbe MOVBE 目标操作数,源操作数 复制源操作数的数据,交换字节后,移动数据 假如: movbe eax,(float)1000.0 eax == 0x00007A44 movbe eax, ...

  4. BGV上线两天价格超过880美金,下一个YFI已到来!

    BGV自上线以来就备受币圈关注,众多投资者纷纷表示看好BGV.BGV也不负众望,在上线交易所第二天,价格就迎来了暴涨,最高价格为888.88美金,超越了当前以太坊的价值.而这也迎来了币圈众多投资者的一 ...

  5. Unity安卓apk打包过程

    前言:对于Unity开发小白来说,Android打包无疑是个头痛的问题,所以我总结了 Unity安卓APK的打包过程 第一步:下载对应版本的Android Platform 第二步:安装JDK并配置J ...

  6. vscode好用插件总结

    做个记录:https://blog.csdn.net/xishining/article/details/90819481 1.Auto Rename Tag --自动重命名成对的HTML标记.假如你 ...

  7. JDBC 用PreparedStatement语句动态操作SQL语句

    https://blog.csdn.net/u014453898/article/details/79038187 1.Statement 和 PreparedStatement: Statement ...

  8. 设置ViewPager 自动滑动时间,速度 方便展示动画

    ViewPager.setCurrentItem(position),即使已设置动画,但是没有动画效果 原因:因为ViewPager滑动之前的时间间隔太短,可以通过反射,去修改ViewPager自动滑 ...

  9. 力扣896. 单调数列-C语言实现-简单题

    题目 传送门 文本 如果数组是单调递增或单调递减的,那么它是单调的. 如果对于所有 i <= j,A[i] <= A[j],那么数组 A 是单调递增的. 如果对于所有 i <= j, ...

  10. 注册 Amazon Web Services(AWS) 账号,助园一臂之力

    感谢大家去年的大力支持,今年园子继续和 Amazon Web Services(AWS) 合作,只要您通过 博客园专属链接 注册一个账号(建议使用手机4G网络注册),亚马逊就会给园子收入,期待您的支持 ...