需求
最近一批服务器配置了SSH免密登录,需要编写一个脚本检查SSH免密是否可用
服务清单
将服务器IP地址配置到一个文件中ip_list.txt,内容如下:
bash
192.168.1.1
192.168.1.2
192.168.1.3
检查脚本
bash
#!/bin/bash
serverfile=ip_list.txt
hostname=''
while read line; do
# 获取IP
IP=`echo $line | cut -d " " -f1 | sed 's/\r//'`
if [ -z "$hosts" ]; then
hosts="$IP"
else
hosts="$hosts $IP"
fi
done < ./$serverfile
for 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 ]; then
echo "$ip OK"
else
echo "$ip FAIL (退出码: $exit_code)"
fi
done
检查结果
bash
192.168.1.1 OK
192.168.1.2 FAIL (退出码: 255)
192.168.1.3 OK