You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

请求编写Linux Bash脚本:批量验证SSH登录并输出状态

批量SSH登录脚本优化

你的原有脚本仅能捕获登录成功的输出,未处理失败场景,且用for i in \cat IP.txt``的方式在IP包含特殊字符时易出问题。以下是优化后的脚本,可同时处理成功/失败场景并输出指定格式内容:

#!/bin/bash
OUTPUT_FILE="outputIP.txt"
# 清空输出文件(若需保留历史记录可删除此行)
> "$OUTPUT_FILE"

while read -r ip; do
    # 跳过空行
    [[ -z "$ip" ]] && continue
    
    # 执行SSH命令,禁用主机密钥检查、设置10秒超时,捕获远程输出
    server_info=$(sshpass -p "abcd" ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10 fsp@"$ip" 2>/dev/null << 'EOF'
        # 远程执行:拼接主机名与系统版本信息
        echo "$(hostname) - $(grep PRETTY_NAME /etc/os-release | cut -d= -f2 | tr -d '"'')"
EOF
    )
    # 记录SSH命令的退出状态码(0为成功,非0为失败)
    exit_status=$?

    if [[ $exit_status -eq 0 ]]; then
        echo "Success: $server_info" >> "$OUTPUT_FILE"
    else
        echo "failed [$ip] connection" >> "$OUTPUT_FILE"
    fi
done < "IP.txt"

关键优化点说明

  • 用while read -r ip读取IP列表:比for循环更健壮,能正确处理空行及含特殊字符的IP(虽IP一般无此情况,但通用性更强)
  • SSH参数优化:-o StrictHostKeyChecking=no避免首次登录时弹出主机密钥确认的交互,防止脚本卡住;-o ConnectTimeout=10设置10秒超时,避免长时间等待无响应的IP
  • 单次SSH连接完成信息获取:减少网络开销,同时用2>/dev/null屏蔽SSH的错误提示(如认证失败、超时),避免干扰输出文件
  • 基于退出状态码判断结果:通过$?获取上一条命令的执行状态,精准区分登录成功/失败场景,输出对应格式内容

内容的提问来源于stack exchange,提问作者Dumitrescu Cristi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 16:13:37