如何在PuTTY中实现读取名称文件并自动回应Red Hat Linux服务器确认提示的脚本
如何在PuTTY中实现读取名称文件并自动回应Red Hat Linux服务器确认提示的脚本
嘿,完全懂你手动处理上百个名称的痛苦!其实核心是在Red Hat服务器端写个批量处理脚本,PuTTY只是用来连接执行的工具,下面给你两种实用方案,一步步来:
方案一:在服务器上编写bash批量脚本(最推荐)
直接在Red Hat服务器上创建脚本,处理本地的名称文件,这样更稳定:
- 先创建脚本文件(比如
batch_delete_snapshots.sh),用编辑器打开:
nano batch_delete_snapshots.sh
- 把下面的代码粘贴进去,根据你的实际情况调整文件路径和命令:
#!/bin/bash # 替换成你的名称文件路径,每行一个服务器名 input_file="myfile.txt" # 逐行读取文件中的名称,避免空格/特殊字符出错 while IFS= read -r server_name do echo "===== 正在处理服务器: $server_name =====" # 自动输出"y"回应确认提示,如果只需要一次确认就用 echo y | ... yes | acli snapshot.delete -c 3 "$server_name" # 检查命令是否执行成功 if [ $? -eq 0 ]; then echo "✅ $server_name 快照删除成功" else echo "❌ $server_name 快照删除失败" fi done < "$input_file"
- 给脚本加执行权限:
chmod +x batch_delete_snapshots.sh
- 运行脚本即可批量处理:
./batch_delete_snapshots.sh
如果你的名称是存放在CSV文件里(比如带表头的server.csv),可以用这个版本的脚本跳过表头:
#!/bin/bash input_file="server.csv" # 跳过第一行表头,按逗号分隔读取服务器名称 tail -n +2 "$input_file" | while IFS=, read -r server_name _ do echo "===== 正在处理服务器: $server_name =====" yes | acli snapshot.delete -c 3 "$server_name" if [ $? -eq 0 ]; then echo "✅ $server_name 处理成功" else echo "❌ $server_name 处理失败" fi done
方案二:通过PuTTY直接远程执行(无需上传脚本到服务器)
如果你不想在服务器上存脚本,可以用PuTTY的命令行工具plink.exe直接从本地触发远程操作:
情况1:本地有名称文件
在Windows的命令提示符(CMD)里运行:
plink.exe -ssh 你的用户名@服务器IP 'while IFS= read -r name; do yes | acli snapshot.delete -c 3 "$name"; done' < 本地路径\myfile.txt
情况2:本地有写好的脚本文件
把脚本存在本地(比如local_script.sh),然后用命令远程执行:
plink.exe -ssh 你的用户名@服务器IP -m 本地路径\local_script.sh
小提示
- 先拿1-2个测试名称跑一遍脚本,确认逻辑没问题再批量操作,避免误删
- 如果
acli命令只需要一次确认,把yes |换成echo y |更高效,不会重复输出y - 确保你有服务器上执行
acli命令的权限
备注:内容来源于stack exchange,提问作者johnism
相关产品推荐
相关产品推荐

