如何在ssh-ing到多个服务器时创建一个日志文件

时间:2018-01-14 18:53:27

标签: linux bash ssh mount logfile

我想创建一个bash脚本来自动将自己连接到一堆服务器,在那里执行一些命令并将这些命令的输出保存在我用来连接的服务器上的 one 日志文件中我自己到所有其他服务器。

到目前为止,我能够在我自己连接的每台服务器上创建一个日志文件,或者在我用来访问所有其他服务器的服务器的控制台上显示每个命令的输出。

我的脚本目前看起来像这样(我知道for循环,但我不想在这种情况下使用它们,因为我需要在每个服务器上执行不同的命令):

#!/bin/bash
ssh server1 <<EOF
hostname
printf '\n'
mount
EOF 

printf '\n'
printf '\n'
printf '\n'

ssh server2 <<EOF
hostname
printf '\n'
mount
EOF

...

我的想法是使用&>>运算符,因为我需要知道所有命令是否成功执行。最后,我想只有一个日志文件看起来应该是这样的:

server1

output of mount 



server 2 

output of mount 

... 

那么,我怎样才能创建只包含一个包含所有已执行命令结果的大型日志文件?此外,如果我使用ssh -T选项来删除消息“由于stdin不是终端而不会分配伪终端”,这个脚本是否仍能正常工作?我是否必须在我的脚本中使用mount来安装某些特殊字符(例如/ _)?

提前致谢!

2 个答案:

答案 0 :(得分:0)

我建议使用logstashfluentd等开源实用程序。

答案 1 :(得分:0)

我会使用fabric,这是一个使用ssh与多个服务器交互的工具。它提供了执行远程shell命令的操作。

对于您的示例, fabfile

from fabric.api import run, sudo

def my-task():
    run('hostname')
    run('mount')

你可以执行它:

fab -H server1,server2 my-task

输出将通过您正在执行的服务器的标准输出,以便您可以轻松地将其重定向到文件:

fab -H server1,server2 my-task | my-task.log