重庆思庄Oracle、Redhat认证学习论坛
标题: shell编程-ssh免交互批量分发公钥脚本 [打印本页]
作者: 梅钟园 时间: 2019-10-22 13:24
标题: shell编程-ssh免交互批量分发公钥脚本
本帖最后由 梅钟园 于 2019-10-22 18:31 编辑
shell编程-ssh免交互批量分发公钥脚本
脚本基本原理
1、控制端免交互创建秘钥和公钥:
- ssh-keygen -t rsa -f /root/.ssh/id_rsa -N ""
复制代码 2、免交互发送公钥
- 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”,它能够将传参的参数依次向前推进。
- which ssh-copy-id
- /usr/bin/ssh-copy-id
- 以下为shift在ssh-copy-id命令中使用的典型代码
- if [ "-i" = "$1" ]; then
- shift
- # check if we have 2 parameters left, if so the first is the new ID file
- if [ -n "$2" ]; then
- if expr "$1" : ".*\.pub" > /dev/null ; then
- ID_FILE="$1"
- else
- ID_FILE="$1.pub"
- fi
- shift # and this should leave $1 as the target name
- fi
- else
- if [ x$SSH_AUTH_SOCK != x ] && ssh-add -L >/dev/null 2>&1; then
- GET_ID="$GET_ID ssh-add -L"
- fi
- fi
复制代码 以下为shift示例代码,能够加助理解shift将参数依次向前推进的含义
- cat shift_test.sh
- #!/bin/bash
- until [ $# -eq 0 ];do
- echo $*
- shift
- done
- bash shift_test.sh 1 2 3 4 5
- 1 2 3 4 5
- 2 3 4 5
- 3 4 5
- 4 5
- 5
复制代码
ssh免交互分发公钥的脚本
脚本功能:
1、能够输入选项 -h/--hlep查看帮助
2、不输入参数进行默认分发
3、可以指定主机的IP或者可以被解析的主机名进行分发
4、提示输出友好
5、能够自动检测已经分发了的主机,分发过了的就不再重复分发
6、代码尽量简洁
7、指定多个主机进行批量分发
效果示例1:帮助