2016-01-21 122 views
0

在远程服务器上运行命令的最佳方式是什么?我正在考虑使用SSH,但是有没有比这更好的方法? 我使用了Red Hat Linux,我想在其中一台服务器上运行该命令,指定我想让我的命令运行的其他服务器,并且它必须在指定的服务器中执行完全相同的操作。木偶不能完全帮助,但我可能能够与Puppet结合使用其他工具来为我完成这项工作。在远程服务器上运行命令

+0

UPDATE:我试过SSH,并可以使用以下命令在远程服务器之一中看到更改:ssh username @ serverxyz mkdir/etc/dir/test123并且它确实在serverxyz中创建了一个目录“test123”。现在,如果我想在多个远程服务器上进行一次这些更改,那么我该怎么做? – James

+0

做一个'for'循环,依次在每个服务器上循环...... –

回答

1

看来你能在不输入密码的情况下登录到其他服务器。我假设这是基于SSH密钥的,如下所述:https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Deployment_Guide/s2-ssh-configuration-keypairs.html

您说另一个脚本正在生成服务器列表。现在可以使用以下简单脚本遍历列表:

for server in `./server-list-script`; do 
    echo $server: 
    ssh [email protected]$server mkdir /etc/dir/test123 
done >logfile 2>&1 

文件“logfile”将收集输出。我很确定Puppet能够做到这一点。

1

您的解决方案几乎肯定会以某种程度涉及ssh

您可能需要一些东西来帮助管理多个服务器上的命令的执行; ansible是一个很好的选择。

例如,如果我想在一堆服务器安装libvirt并确保libvirtd运行,我可能会通过这样的配置ansible-playbook

- hosts: all 
    tasks: 
    - yum: 
     name: libvirt 
     state: installed 
    - service: 
     name: libvirtd 
     state: running 
     enabled: true 

这将ssh到所有的服务器在我的“库存”(文件或命令 - 提供服务器列表)中,安装libvirt程序包,启动libvirtd,然后安排服务在引导时自动启动。

另外,如果我想在一堆服务器运行puppet apply,我可以只使用ansible命令,而无需配置文件运行的ad-hoc命令:

ansible all -m command -a 'puppet apply' 
+0

我想我已经在很大程度上回答了这个问题。你当然可以在一个循环或类似的东西中运行你的'ssh'命令,这取决于你的需要。 – larsks

+0

好的,谢谢。另外,我将有另一个脚本列出我应该进行更改的服务器名称。 SSH将如何读取该列表并在这些服务器中运行该命令? – James

+0

运行前需要事先配置/设置吗?如何连接到木偶? – James

相关问题