重庆思庄Oracle、Redhat认证学习论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2342|回复: 0
打印 上一主题 下一主题

[服务应用] shell编程-ssh免交互批量分发公钥脚本

[复制链接]
跳转到指定楼层
楼主
发表于 2019-10-22 13:24:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 梅钟园 于 2019-10-22 18:31 编辑

shell编程-ssh免交互批量分发公钥脚本

脚本基本原理

1、控制端免交互创建秘钥和公钥:
  1. ssh-keygen -t rsa -f /root/.ssh/id_rsa -N ""
复制代码
2、免交互发送公钥
  1. sshpass -ppassword ssh-copy-id -i /root/.ssh/id_rsa.pub "-o StrictHostKeyChecking=no user@172.25.0.21"
复制代码
sshpass              # 非交互式SSH密码提供
-o StrictHostKeyChecking=no # 不提示,ssh将自动添加新的主机密钥用户已知主机文件。
更多参数可以参考man ssh_config
ssh-copy-id        # 本质上是调用ssh命令,进行远程拷贝公钥的一个脚本,其中值得关注的是脚本中的“shift”,它能够将传参的参数依次向前推进。
  1. which ssh-copy-id
  2. /usr/bin/ssh-copy-id
  3.   以下为shift在ssh-copy-id命令中使用的典型代码
  4. if [ "-i" = "$1" ]; then
  5.   shift
  6.   # check if we have 2 parameters left, if so the first is the new ID file
  7.   if [ -n "$2" ]; then
  8.     if expr "$1" : ".*\.pub" > /dev/null ; then
  9.       ID_FILE="$1"
  10.     else
  11.       ID_FILE="$1.pub"
  12.     fi
  13.     shift         # and this should leave $1 as the target name
  14.   fi
  15. else
  16.   if [ x$SSH_AUTH_SOCK != x ] && ssh-add -L >/dev/null 2>&1; then
  17.     GET_ID="$GET_ID ssh-add -L"
  18.   fi
  19. fi
复制代码
以下为shift示例代码,能够加助理解shift将参数依次向前推进的含义
  1. cat shift_test.sh
  2. #!/bin/bash
  3. until [ $# -eq 0 ];do
  4.     echo $*
  5.     shift
  6. done
  7. bash shift_test.sh 1 2 3 4 5
  8. 1 2 3 4 5
  9. 2 3 4 5
  10. 3 4 5
  11. 4 5
  12. 5
复制代码

ssh免交互分发公钥的脚本

脚本功能:
1、能够输入选项 -h/--hlep查看帮助
2、不输入参数进行默认分发
3、可以指定主机的IP或者可以被解析的主机名进行分发
4、提示输出友好
5、能够自动检测已经分发了的主机,分发过了的就不再重复分发
6、代码尽量简洁
7、指定多个主机进行批量分发

效果示例1:帮助
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 支持支持 反对反对
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|手机版|小黑屋|重庆思庄Oracle、Redhat认证学习论坛 ( 渝ICP备12004239号-4 )

GMT+8, 2024-4-23 15:28 , Processed in 0.102094 second(s), 26 queries .

重庆思庄学习中心论坛-重庆思庄科技有限公司论坛

© 2001-2020

快速回复 返回顶部 返回列表