Shell脚本批量SSH执行Linux命令并存储结果故障排查
脚本问题排查与修复方案
原脚本核心问题
- 语法错误:
while read line do缺少语句分隔符,需要在line后添加;,或者将do单独放在下一行 - SSH执行逻辑错误:当前写法仅会登录远程主机进入交互会话,不会自动执行后续命令,只有手动退出远程会话后,才会在你本地的机器执行
cat /etc/redhat-release,拿到的是本地系统版本,不是目标主机的结果 - 循环异常问题:ssh默认会读取标准输入,会吞掉host.txt的后续内容,导致循环只执行一次就结束
- 结果记录逻辑错误:没有关联主机信息和执行结果,日志无法对应每条结果所属的主机
- 关于exit的疑问:如果通过ssh指定远程执行命令,命令执行完成后会话会自动断开,不需要额外添加exit操作
修复后的可用脚本
#!/bin/bash # 可选:清空历史日志 > logfile.txt while read line; do # 跳过host.txt中的空行 [ -z "$line" ] && continue # 远程执行命令并捕获结果,-n参数避免ssh读取标准输入导致循环异常 release_info=$(sshpass -p 'abc123' ssh -n -o StrictHostKeyChecking=no "$line" "cat /etc/redhat-release") # 写入日志,格式为 主机信息 系统版本 echo "$line $release_info" >> logfile.txt done < host.txt
内容的提问来源于stack exchange,提问作者Mohan
相关产品推荐
相关产品推荐

