Shell脚本判断服务器SSH免密是否配置完成

需求

最近一批服务器配置了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
相关推荐
Jay Kay7 小时前
RDMA中CQ为什么用轮询?——从CQ、Doorbell到GID的深度解析
运维·服务器·网络
司小豆7 小时前
第七课:DeepSeek Harness 服务与依赖注入
java·服务器·开发语言·github·ai编程
会周易的程序员7 小时前
5Draft使用说明书
服务器·c++·分布式·raft·共识
Shadow(⊙o⊙)7 小时前
Linux网络——IP协议 子网 路由 IP的分片字段
服务器·网络·tcp/ip
kruptos7 小时前
嵌入式 Linux 驱动开发:第一个内核模块怎么写?
linux·运维·驱动开发·嵌入式硬件
wangqiaowq7 小时前
langfuse linux下的安装部署
linux·运维·服务器
青禾8377 小时前
Docker 从入门到实践:镜像、容器、数据卷与 Docker Compose
运维·docker·容器
wdfk_prog8 小时前
Docker 开发环境到底要交付什么:镜像、源码与运行脚本
运维·docker·容器
Huangjin007_8 小时前
【Linux 系统篇(十七)】进程(五) :进程切换、O(1) 调度算法
linux·运维·服务器
weixin_464307638 小时前
linux虚拟机断网
linux·运维·服务器