首页 > 其他分享 >ansible 第一次批量导入ssh-key

ansible 第一次批量导入ssh-key

时间:2023-04-28 10:00:36浏览次数:37  
标签:key echo host ansible hosts ssh file

适用环境:

  1. 所有主机具有相同的用户名和密码

实现方式:

  1. 通过ansible hosts 文件读取主机列表
  2. 通过expect 自动应答

脚本出处:
github kubeasz\tools

#!/bin/bash

# 此脚本为批量部署服务器ssh key使用

#set -x

# check args count
if test $# -ne 3; then
    echo -e "\nUsage: $0 < hosts file > < username > < password >\n"
    exit 1
fi

# check hosts file
hosts_file=$1
if ! test -e $hosts_file; then
    echo "[ERROR]: Can't find hosts file"
    exit 1
fi

username=$2
password=$3

# check sshkey file 
sshkey_file=~/.ssh/id_rsa.pub
if ! test -e $sshkey_file; then
    expect -c "
    spawn ssh-keygen -t rsa
    expect \"Enter*\" { send \"\n\"; exp_continue; }
    "
fi

# get hosts list
hosts=$(ansible -i $hosts_file all --list-hosts | awk 'NR>1')
echo "======================================================================="
echo "hosts: "
echo "$hosts"
echo "======================================================================="

ssh_key_copy()
{
    # delete history
    sed "/$1/d" -i ~/.ssh/known_hosts

    # start copy 
    expect -c "
    set timeout 100
    spawn ssh-copy-id $username@$1
    expect {
    \"yes/no\"   { send \"yes\n\"; exp_continue; }
    \"*assword\" { send \"$password\n\"; }
    \"already exist on the remote system\" { exit 1; }
    }
    expect eof
    "
}

# auto sshkey pair
for host in $hosts; do
    echo "======================================================================="

    # check network
    ping -i 0.2 -c 3 -W 1 $host >& /dev/null
    if test $? -ne 0; then
        echo "[ERROR]: Can't connect $host"
        exit 1
    fi
    # /etc/hosts中存在 该ip信息时
    cat /etc/hosts | grep -v '^#' | grep $host >& /dev/null
    if test $? -eq 0; then
        hostaddr=$(cat /etc/hosts | grep -v '^#' | grep $host | awk '{print $1}')
        hostname=$(cat /etc/hosts | grep -v '^#' | grep $host | awk '{print $2}')
        
        ssh_key_copy $hostaddr
        ssh_key_copy $hostname
    else
        ssh_key_copy $host
    fi

    echo ""
done

标签:key,echo,host,ansible,hosts,ssh,file
From: https://www.cnblogs.com/wangend/p/17361024.html

相关文章

  • questions_02:【KeyError: 'mobile_phone'[27/Apr/2023 21:42:21] "POST /register/ H
    BUG在成功注册之后,如果填写相同的信息,会报出一个【KeyError:'mobile_phone'[27/Apr/202321:42:21]"POST/register/HTTP/1.1"50086526】的bug,原因是我们的cleaned_data中的数据是按照fields中的顺序去校验成功之后添加的,所以当出现相同的数据时候cleaned_data前面几个字......
  • 71、ansible编排-playbook
    playbook介绍在Ansible中,Playbook是一个用YAML格式编写的文本文件,它描述了一系列任务,每个任务又是一个或多个action的集合。Playbook通过在远程主机上执行任务来实现自动化。在playbook中,可以指定主机、变量、任务、处理器、模块等等。通过对这些组件的组合和配置,可以实......
  • List与HashMap区别,key,value,感谢火龙果,dgqbcht,awusoft帮助
    首先要感谢不想要妮称,dgqbcht,awusoft友情帮助Map是一个映射,是key-value值对.Map在java1.0以后进行了修改,使其能够与普通的集合相融.在Map的内部定义了内部接口Entry,主要就是要讲key和value以集合(Set)的形式来体现.List是集合的一个分支,是一个接口.List中的元素有顺序(输......
  • ansible推送文件到目标主机时报错 UNREACHABLE! | Permission denied (publickey,gssa
    问题现象:[root@linlin]#ansibleall-mcopy-a'src=/etc/ansible/lin/test.txtdest=/home/'192.168.12.203|UNREACHABLE!=>{"changed":false,"msg":"Failedtoconnecttothehostviassh:[email protected]:Pe......
  • publish over ssh插件的使用。
    配置1.先安装publishoverssh插件,然后重新启动jenkins。2.安装后,给服务器起一个别名、配置ip,用户名、端口号、密码。连接测试,提示:success就代表成功了。如果提示密钥无效,而自己配置的都没有问题,可以选择把安装了jenkins的服务器重新一下,或者用别的服务器安装jenkins在试一下......
  • js 获取对象的key value,放到数组对象中
    letarr=[];if(res.data&&res.data.havePowerComCodes){for(const[key,value]ofObject.entries(res.data.havePowerComCodes)){constobj={......
  • win10下复制ssh公钥到linux
    win10端已经生成了ssh的公钥。在powershell中使用ssh-copy-id命令,提示如下:ssh-copy-id:Theterm'ssh-copy-id'isnotrecognizedasanameofacmdlet,function,scriptfile,orexecutableprogram.Checkthespellingofthename,orifapathwasincluded,verify......
  • Apk签名_自签名_命令行_四字节对齐_apktool_apksigner_keytool
    生成秘钥库keytool-genkey-alias别名-keyalgRSA-validity证书有效天数-keystore名称.keystore如需查看:keytool-list-keystore"antma.keystore"注意使用jarsigner签名为v1无法安装在新的设备上以下工具都在Androidstudio的SDK中apksigner签名代码:apksigner......
  • gitleaks 保护以及发现安全key的工具
    gitleaks可以方便的扫描git项目,发现潜在的key泄漏问题,可以方便的集成到我们的ci/cd中说明对于需要发现代码中安全key的问题,gitleaks是一个值得使用的工具参考资料https://github.com/gitleaks/gitleakshttps://gitleaks.io/......
  • [AHK]用AutoHotkey面向对象实践“简单工厂模式”
    用面向对象编程实现一个计算器程序,要求输入两个数和运算符号,得到结果。“所有编程初学者都会有这样的问题,就是碰到问题就直觉地用计算机能够理解的逻辑来描述和表达待解决的问题及具体的求解过程。这其实是用计算机的方式去思考,比如计算器这个程序,先要求输入两个数和运算符号,然后......