Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.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
用于从多个服务器收集信息的Bash脚本_Bash_Shell - Fatal编程技术网

用于从多个服务器收集信息的Bash脚本

用于从多个服务器收集信息的Bash脚本,bash,shell,Bash,Shell,我只想问你一个小问题 我制作了一个小的shell脚本,它允许我连接到服务器,收集某些文件,并将它们压缩到另一台服务器上的另一个位置,效果很好 这是一种风向标: #!/bin/bash ssh -T user@server1 mkdir /tmp/logs cd /tmp/logs tar -czvf ./log1.tgz /somefolder/docs tar -czvf ./log2.tgz /somefolder/images tar -czvf ./log3.tgz /s

我只想问你一个小问题

我制作了一个小的shell脚本,它允许我连接到服务器,收集某些文件,并将它们压缩到另一台服务器上的另一个位置,效果很好

这是一种风向标:

#!/bin/bash  

ssh -T user@server1

mkdir /tmp/logs

cd /tmp/logs

tar -czvf ./log1.tgz /somefolder/docs

tar -czvf ./log2.tgz /somefolder/images

tar -czvf ./log3.tgz /somefolder/video

cd ..

-czvf logs_all.tgz /tmp/logs
我真正想做的是:

  • 通过ssh连接时使用root密码登录
  • 运行命令
  • 注销
  • 登录到下一个服务器
  • 重复此操作,直到编译完所有日志
  • 而且,这不是必需的,但是,如果我可以显示进度(可能是一个条形图),那就太酷了

    如果有人能帮忙,那就太棒了


    我在n00b和新手之间,所以请对我温柔

    ssh
    可以将命令作为参数在远程计算机上运行:

    ssh -T user@server1 "tar -czf - /somefolder/anotherfolder"
    
    ssh -T user@server1 "tar -czf - /somefolder/anotherfolder" > /path/on/local/machine/log1.tgz
    
    这将在远程机器上执行
    tar
    命令,将tar的输出写入stdout,stdout通过
    ssh
    命令传递给本地机器。因此,您可以在本地的某个地方编写它(不需要在远程计算机上使用该
    /tmp/logs/
    ):

    如果您只想在删除服务器上收集它们(不希望将它们传输到本地计算机),只需执行直接版本:

    ssh -T user@server1 "mkdir /tmp/logs/"
    ssh -T user@server1 "tar -cvzf /tmp/logs/log1.tgz /somefolder/anotherfolder"
    ssh -T user@server1 "tar -cvzf /tmp/logs/log2.tgz /somefolder/anotherfolder"
    …
    ssh -T user@server1 "tar -czvf /tmp/logs_all.tgz /tmp/logs"
    

    ssh
    可以将命令作为参数在远程计算机上运行:

    ssh -T user@server1 "tar -czf - /somefolder/anotherfolder"
    
    ssh -T user@server1 "tar -czf - /somefolder/anotherfolder" > /path/on/local/machine/log1.tgz
    
    这将在远程机器上执行
    tar
    命令,将tar的输出写入stdout,stdout通过
    ssh
    命令传递给本地机器。因此,您可以在本地的某个地方编写它(不需要在远程计算机上使用该
    /tmp/logs/
    ):

    如果您只想在删除服务器上收集它们(不希望将它们传输到本地计算机),只需执行直接版本:

    ssh -T user@server1 "mkdir /tmp/logs/"
    ssh -T user@server1 "tar -cvzf /tmp/logs/log1.tgz /somefolder/anotherfolder"
    ssh -T user@server1 "tar -cvzf /tmp/logs/log2.tgz /somefolder/anotherfolder"
    …
    ssh -T user@server1 "tar -czvf /tmp/logs_all.tgz /tmp/logs"
    

    您可以发送一个tar命令,将压缩的归档文件写入标准输出并在本地保存:

    ssh user@server1 'tar -C /somefolder -czvf - anotherfolder' > server1.tgz
    ssh user@server2 'tar -C /somefolder -czvf - anotherfolder' > server2.tgz
    ...
    

    您可以发送一个tar命令,将压缩的归档文件写入标准输出并在本地保存:

    ssh user@server1 'tar -C /somefolder -czvf - anotherfolder' > server1.tgz
    ssh user@server2 'tar -C /somefolder -czvf - anotherfolder' > server2.tgz
    ...
    

    使用这样的根密码登录将是一个巨大的安全漏洞。。。我不建议将它作为root用户用于SSH-in,也不建议通过sript将SSH-in作为正常使用并自动进入root,因为您必须将它存储在可读的位置并将其传递给您的登录名。也许可以尝试使用Ansible或其他可以以加密格式存储sudo密码或用户密码并指定作为哪个用户运行命令的东西。使用这样的根密码登录将是一个巨大的安全漏洞。。。我不建议将它作为root用户用于SSH-in,也不建议通过sript将SSH-in作为正常使用并自动进入root,因为您必须将它存储在可读的位置并将其传递给您的登录名。也许可以尝试使用Ansible或其他可以以加密格式存储sudo密码或用户密码并指定作为哪个用户运行命令的东西。