符号转义解决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执行的命令中,是否存在字符需要转义,命令的执行结果就可能出现问题。

知识点:
ssh远程执行命令的符号转义问题 - IUNI_JM - 博客园 (cnblogs.com)

posted @ 2022-06-28 10:14  Cathon  阅读(206)  评论(0编辑  收藏  举报