符号转义解决SSH远程命令执行的问题
场景:
服务器 A B C D 上存在一些日志,日志中的每行包含了日期、日志级别、日志信息等。
现在要求从跳板机 X 获取这四台服务器上的数据,并通过规则(如日期)筛选,汇总到一个文件中。
日志内容如下所示:
2022-06-27 aaa
2022-06-28 aaa
2022-06-28 bbb
标准答案:
#!/bin/sh
# Here is Server A
YYYYMMDD=$(date "+%Y-%m-%d")
filename=/tmp/output.txt
iplist=(
"x.x.x.x"
"x.x.x.x"
"x.x.x.x"
"x.x.x.x"
)
> $filename
for ip in ${iplist[@]}; do
ssh $ip "grep $YYYYMMDD /path/to/log.log | awk '{print \$2}' | sort | uniq" >> $filename
# or use
# ssh $ip "grep $YYYYMMDD /path/to/log.log" | awk '{print $2}' | sort | uniq >> $filename
done
可能出现的问题:
如果没有关注到,远程SSH执行的命令中,是否存在字符需要转义,命令的执行结果就可能出现问题。