Linux 使用SSH从多个服务器grep关键字
我对脚本编写完全陌生,在从其他一些在线资源拼凑脚本时遇到了一些困难 我想做的是运行一个bash脚本,该脚本将在多台服务器上的/etc/hosts文件中grep关键字域。在输出文件中,我正在查找包含此关键字但不希望进行任何更改的服务器列表。只需查找哪些机器具有此值。因为有很多机器存在问题,所以列出我要搜索的服务器将不起作用,但是我从中执行此操作的机器确实具有所有有问题的服务器的SSH密钥 我在机器上的三个文件中列出了要查询的服务器(每个环境一个),我将从中运行此脚本Linux 使用SSH从多个服务器grep关键字,linux,bash,shell,redhat,Linux,Bash,Shell,Redhat,我对脚本编写完全陌生,在从其他一些在线资源拼凑脚本时遇到了一些困难 我想做的是运行一个bash脚本,该脚本将在多台服务器上的/etc/hosts文件中grep关键字域。在输出文件中,我正在查找包含此关键字但不希望进行任何更改的服务器列表。只需查找哪些机器具有此值。因为有很多机器存在问题,所以列出我要搜索的服务器将不起作用,但是我从中执行此操作的机器确实具有所有有问题的服务器的SSH密钥 我在机器上的三个文件中列出了要查询的服务器(每个环境一个),我将从中运行此脚本 Linux.prod.dat
Linux.prod.dat
Linux.qa.dat
Linux.dev.dat
每个文件只是环境中服务器名称的列表。例如
server1
server2
server3
etc...
我在这里完全迷路了,非常感谢您的帮助。以下是一个例子:
KEYWORD=foo
SERVERLIST=Linux.prod.dat
OUTPUTLIST=output.dat
for host in $(cat ${SERVERLIST}); do
if [[ -n "$(ssh ${host} grep '${KEYWORD}' /etc/hosts && echo Y)" ]]; then
echo ${host} >> ${OUTPUTLIST}
fi
done
尝试GNU并行
parallel --tag ssh {} grep -l "KEYWORD" :::: Linux.prod.dat
parallel
多次运行命令,用Linux.prod.dat
文件中的行替换{}
。
--tag
开关从文件开头的Linux.prod.dat添加值。因此,该命令的输出如下所示:
server1 /etc/hosts
server5 /etc/hosts
server7 /etc/hosts
其中server1、server5等将是
/etc/hosts
包含关键字的服务器的名称
givepatajob,servername.dat中有什么?服务器列表?事实上,我认为我引用它是错误的。这是我在另一个网站上找到的东西,但在我的主机上似乎找不到任何类似的东西。我从问题中删除了这个。道歉。也许是将已知的_主机用于root的一种方法?我又错了。我有一个可用服务器的.dat,它只是使用了不同的命名约定。在这种情况下,它被环境隔开,所以我有三个。。。linux.dev.dat linux.prod.dat linux.qa.dat对此表示抱歉。请将此数据添加到问题中,如果可能,请举例说明这些文件中包含的内容。感谢您查看此内容。我在上面编辑。Each.dat只是每个环境中所有服务器名的列表。非常感谢您查看此列表。我会尝试一下,让你知道结果,但我认为这正是我所需要的。这确实让我得到了我所需要的。非常感谢你在这方面的帮助。@givepatajob,嗯。。。如果这对你有帮助的话,也许你可以接受答案?…看起来你错过了一个结束语