shell脚本————多主机基于ssh key验证

#使用方法 脚本执行+ ip地址段 如10.98.4.

cat > ssh-auth.sh << 'EOF'
#!/bin/bash

#当前用户密码,需要所有主机密码一致
PASS=test123
#设置网段最小和最大的地址的尾数
BEGIN=1
END=3
device=ens34 #网卡名称
par=10.98.4.  #ip范围 x.x.x. 最后一位在BEGIN和END变量中定义

IP=`ip a s $device | awk -F'[ /]+' 'NR==3{print $3}'`
NET=${IP%.*}.

. /etc/os-release

color () {
    RES_COL=60
    MOVE_TO_COL="echo -en \\033[${RES_COL}G"
    SETCOLOR_SUCCESS="echo -en \\033[1;32m"
    SETCOLOR_FAILURE="echo -en \\033[1;31m"
    SETCOLOR_WARNING="echo -en \\033[1;33m"
    SETCOLOR_NORMAL="echo -en \E[0m"
    echo -n "$par" && $MOVE_TO_COL
    echo -n "["
    if [ $2 = "success" -o $2 = "0" ] ;then
        ${SETCOLOR_SUCCESS}
        echo -n $"  OK  "    
    elif [ $2 = "failure" -o $2 = "1"  ] ;then 
        ${SETCOLOR_FAILURE}
        echo -n $"FAILED"
    else
        ${SETCOLOR_WARNING}
        echo -n $"WARNING"
    fi
    ${SETCOLOR_NORMAL}
    echo -n "]"
    echo 
}

#安装sshpass
install_sshpass() {
    if [[ $ID =~ centos|rocky|rhel ]];then
        rpm -q sshpass &> /dev/null || yum -y install sshpass
    else
        dpkg -l sshpass &> /dev/null || { sudo apt update;sudo apt -y install sshpass; }
    fi
    if [ $? -ne 0 ];then 
        color '安装 sshpass 失败!' 1
        exit 1
    fi
}

scan_host() {
    [ -e ./SCANIP.log ] && rm -f SCANIP.log
    for((i=$BEGIN;i<="$END";i++));do
        ping -c 1 -w 1  ${NET}$i &> /dev/null  && echo "${NET}$i" >> SCANIP.log &
    done
    wait
}

push_ssh_key() {
       #生成ssh key 
    [ -e ~/.ssh/id_rsa ] || ssh-keygen -P "" -f ~/.ssh/id_rsa
    sshpass -p $PASS ssh-copy-id -o StrictHostKeyChecking=no ${USER}@$IP  &>/dev/null

    ip_list=(`sort -t . -k 4 -n  SCANIP.log`)
    for ip in ${ip_list[*]};do
        sshpass -p $PASS scp -o StrictHostKeyChecking=no -r ~/.ssh ${USER}@${ip}: &>/dev/null
    done

    #把.ssh/known_hosts拷贝到所有主机,使它们第一次互相访问时不需要输入yes回车
    for ip in ${ip_list[*]};do
        scp ~/.ssh/known_hosts ${USER}@${ip}:.ssh/   &>/dev/null
        color "$ip" 0
    done
}

install_sshpass
scan_host
push_ssh_key
EOF
在使用Jenkins调用Shell脚本执行SSH时,出现"host key verification failed"错误是因为SSH无法验证远程主机的密钥。这可能是由以下原因导致的: 1. 第一次连接:当第一次使用SSH连接到远程主机时,主机的密钥会被保存在~/.ssh/known_hosts文件中。如果主机的密钥发生了变化,就会导致验证失败。 解决方法:打开Jenkins所在服务器的终端,用ssh命令手动连接到该远程主机,确认是否出现了密钥变化的提示信息。如果确认变化是合理的,可以删除~/.ssh/known_hosts文件中对应的主机密钥,然后重新执行Jenkins任务。 2. 未正确配对:如果远程主机使用了公钥/私钥对进行连接验证,而Jenkins任务在使用SSH时没有正确配置公钥/私钥对,也会导致验证失败。 解决方法:检查Jenkins任务中SSH配置的密钥路径是否正确,并确保公钥已经添加到远程主机的~/.ssh/authorized_keys文件中。 3. hosts文件设置不正确:如果在远程主机的/etc/hosts文件中设置了不正确的主机名,会导致验证失败。 解决方法:在远程主机上检查/etc/hosts文件,确保主机名和IP地址的对应关系正确。 综上所述,解决"host key verification failed"错误的方法包括删除已知主机密钥、正确配置公钥/私钥对和检查/etc/hosts文件设置等。根据具体情况进行排查和解决,可以消除该错误并使Jenkins任务能够顺利执行SSH操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

背锅攻城师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值