废话不多说,直接上脚本
#!/bin/bash # 将这些主机名或IP地址替换为您要访问的实际主机列表 HOSTS=("192.168.1.2" "192.168.1.3" "192.168.1.4") # 将这个路径替换为您的私钥路径 PRIVATE_KEY_PATH="/path/to/your/private_key" # 检查私钥文件是否存在 if [ ! -f "$PRIVATE_KEY_PATH" ]; then echo "私钥文件不存在: $PRIVATE_KEY_PATH" exit 1 fi # 循环遍历主机列表并尝试SSH连接 for HOST in "${HOSTS[@]}"; do echo "正在连接到主机:$HOST" ssh -i "$PRIVATE_KEY_PATH" -o StrictHostKeyChecking=no -o BatchMode=yes -o ConnectTimeout=5 "$HOST" 'echo "已成功连接到: $(hostname)"' if [ $? -eq 0 ]; then echo "成功连接到主机:$HOST" else echo "无法连接到主机:$HOST" fi echo "-------------------------------------" done
这个脚本将尝试使用提供的私钥文件连接到每个主机。请确保您已将HOSTS数组更改为您要访问的主机的IP地址或主机名,以及将PRIVATE_KEY_PATH更改为您的私钥的路径。
要运行此脚本,请将其保存为一个文件,例如multi_ssh.sh,并在终端中运行以下命令:
chmod +x multi_ssh.sh ./multi_ssh.sh
这将使脚本可执行,并尝试连接到您在HOSTS数组中提供的所有主机。请注意,您需要在计算机上安装SSH客户端以运行此脚本。
#!/bin/bash # #******************************************************************** #Author: zhangyapeng #QQ: 2284271599 #Date: 2023-03-21 #FileName: ssh_key.sh #URL: http://www.huangmingyue.com #Description: 基于key验证多主机ssh访问 #Copyright (C): 2023 All rights reserved #******************************************************************** PASS=centos1 END=254 IP=`ip a s eth0 | grep 'inet' | awk -F'[ /]+' 'NR==1{print $3}'` NET=${IP%.*}. . /etc/os-release rm -f /root/.ssh/id_rsa [ -e ./SCANIP.log ] && rm -f SCANIP.log for((i=3;i<="$END";i++));do ping -c 1 -w 1 ${NET}$i &> /dev/null && echo "${NET}$i" >> SCANIP.log & done wait echo "以下为在线主机,请确保以下主机密码一致" cat SCANIP.log echo "======================================================" ssh-keygen -P "" -f /root/.ssh/id_rsa &> /dev/null if [ $ID = "centos" -o $ID = "rocky" ];then rpm -q sshpass &> /dev/null || yum -y install sshpass &> /dev/null else dpkg -L sshpass &> /dev/null ||{ apt update; apt -y install sshpass; } &> /dev/null fi sshpass -p $PASS ssh-copy-id -o StrictHostKeyChecking=no $IP &> /dev/null AliveIP=(`cat SCANIP.log`) for n in ${AliveIP[*]};do sshpass -p $PASS scp -o StrictHostKeyChecking=no -r /root/.ssh root@${n}: done #把.ssh/known_hosts拷贝到所有主机,使它们第一次互相访问时不需要输入回车 for n in ${AliveIP[*]};do scp /root/.ssh/known_hosts ${n}:.ssh/ &> /dev/null echo ${n}'已准备就绪' done
文章评论