Shell脚本判断服务器SSH免密是否配置完成
需求
最近一批服务器配置了SSH免密登录,需要编写一个脚本检查SSH免密是否可用
服务清单
将服务器IP地址配置到一个文件中ip_list.txt,内容如下:
192.168.1.1
192.168.1.2
192.168.1.3
检查脚本
#!/bin/bashserverfile=ip_list.txt
hostname=''
while read line; do# 获取IPIP=`echo $line | cut -d " " -f1 | sed 's/\r//'`if [ -z "$hosts" ]; thenhosts="$IP"elsehosts="$hosts $IP"fi
done < ./$serverfilefor ip in $hosts
do# 执行远程命令,并将标准输出和标准错误合并后传递给过滤管道ssh -q root@$ip "echo 'TEST'" 2>&1 | grep -v -E "TEST|Authorized|Web console" | grep -v '^$'# 关键步骤:获取上一条ssh命令的退出状态码# 在Bash中,${PIPESTATUS[0]} 记录了管道中第一个命令(即ssh)的退出状态exit_code=${PIPESTATUS[0]}# 根据状态码判断是否成功if [ $exit_code -eq 0 ]; thenecho "$ip OK"elseecho "$ip FAIL (退出码: $exit_code)"
fi
done
检查结果
192.168.1.1 OK
192.168.1.2 FAIL (退出码: 255)
192.168.1.3 OK
