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

标题: shell编程-ssh免交互批量分发公钥脚本 [打印本页]

作者: 梅钟园    时间: 2019-10-22 13:24
标题: shell编程-ssh免交互批量分发公钥脚本
本帖最后由 梅钟园 于 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:帮助
521545daed9aa9f4fe.png
登录/注册后可看大图