Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 使用SSH从多个服务器grep关键字_Linux_Bash_Shell_Redhat - Fatal编程技术网

Linux 使用SSH从多个服务器grep关键字

Linux 使用SSH从多个服务器grep关键字,linux,bash,shell,redhat,Linux,Bash,Shell,Redhat,我对脚本编写完全陌生,在从其他一些在线资源拼凑脚本时遇到了一些困难 我想做的是运行一个bash脚本,该脚本将在多台服务器上的/etc/hosts文件中grep关键字域。在输出文件中,我正在查找包含此关键字但不希望进行任何更改的服务器列表。只需查找哪些机器具有此值。因为有很多机器存在问题,所以列出我要搜索的服务器将不起作用,但是我从中执行此操作的机器确实具有所有有问题的服务器的SSH密钥 我在机器上的三个文件中列出了要查询的服务器(每个环境一个),我将从中运行此脚本 Linux.prod.dat

我对脚本编写完全陌生,在从其他一些在线资源拼凑脚本时遇到了一些困难

我想做的是运行一个bash脚本,该脚本将在多台服务器上的/etc/hosts文件中grep关键字域。在输出文件中,我正在查找包含此关键字但不希望进行任何更改的服务器列表。只需查找哪些机器具有此值。因为有很多机器存在问题,所以列出我要搜索的服务器将不起作用,但是我从中执行此操作的机器确实具有所有有问题的服务器的SSH密钥

我在机器上的三个文件中列出了要查询的服务器(每个环境一个),我将从中运行此脚本

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,嗯。。。如果这对你有帮助的话,也许你可以接受答案?…看起来你错过了一个结束语