有什么替代Clusterssh,pssh等,通过一个接口来pipe理多个基于SSH的服务器?
Clusterssh的一个弱点是我的服务器使用基于密钥的身份validation,使用passhpraselogin,无法使用私钥login到服务器。
有没有其他支持使用私钥进行身份validation的可用选项?
看看Rundeck – http://rundeck.org/
布
首先定义你的任务:
from fabric.api import * @parallel @hosts('192.168.3.118', '192.168.6.142') def hostname(): run('hostname')
然后通过fab命令行工具执行:
$ fab -f /path/to/.py/file hostname [192.168.3.118] Executing task 'hostname' [192.168.6.142] Executing task 'hostname' [192.168.6.142] run: hostname [192.168.3.118] run: hostname [192.168.6.142] out: SVR040-6142 [192.168.3.118] out: SVR040-3118.localdomain Done.
你可以整个猪,并安装像木偶或厨师 configurationpipe理系统 。 你没有提到你实际上要pipe理多less个节点,所以这可能是过度的,但是,当然,你可以用这种方式集中控制很多机器。 如果你现在很小,但正在增长,那么你可能还想在你做得更大之前设立厨师。
如果你需要通过一组特定的节点运行ad hoc命令,你可以做一些像knife ssh 'roles:webserver' 'hostname' (刀是主厨的命令行工具)为所有有节点的节点运行hostname命令web服务器angular色。
我更喜欢shmux并行地在许多主机上执行相同的命令。
我使用期望脚本来自动login(特别是因为我必须通过一个jumb框,并进入一个chroot和大量的密码必须input),并对cssh的configuration做了一些“调整”。 所以,我有这个“主要脚本”在我的bin文件夹中给出一个“服务器名称/别名”它把我带到我想要的服务器,我想要的地方。
在〜/ .clusterssh / config中我已经设置了“ssh”参数来指向我的脚本,“ssh_args”也必须设置成一些无害的/假的参数,这是因为cssh有它的默认参数列表,如果留空默认列表将最终到脚本。
因此,脚本(在每个窗口/terminal中)将会收到这个参数和给予cssh的参数中的一个,它从给定服务器的文件中恢复的脚本设置了凭证,并且必须执行以便到达的步骤我想,然后它调用所有数据的“期望代码”。
〜/ .clusterssh /configuration
ssh=/home/user/bin/qs.sh ssh_args=-a
qs.sh
#!/bin/bash export PATH=~/bin:$PATH shift case $1 in q4|q5|q6|q7|q8|q9) essh user1@axt$1 ### essh it's some little bash script that does the things I said before and in the end it launches the expect ;; q1|q2|q3) essh axtr@axt$1 ;; *) echo "GOOH" esac
所以我通常用这样的东西来称呼它
# cssh q4 q5 q6 q7
它也与“簇别名”具有群集“qAll q4 q5 q6 q7”我可以用cssh qAll
希望它能帮助别人。
您还应该看看MCollective ,它可能是实时与多台服务器进行交互的最佳和最灵活的方式。 这是一个正确设置的工作,可能会超出您的需求,但肯定会胜过Clusterssh和所有其他基于SSH的解决scheme。 一旦你拥有了它,如果你知道了一些Ruby,那么你可能无法做到这一点。
我问了自己同样的问题,因为我发现在Mac OS X上clussh对X11或XQuartz的依赖很烦人,而且由clusterssh打开的terminal窗口比在Terminal.app中看起来丑陋
这就是我在Joerg Jaspert的博客上偶然发现了一个基于tmux的脚本: http : //blog.ganneff.de/blog/2013/03/tmux—like-screen-just-nicer.html
基本上你input
tm ms HOST1 user@HOST2,然后打开一个包含两个窗格的tmux窗口的会话
bash提示符适用于简单的事情:
在servers.txt中创build一个服务器列表,每个服务器一行。
然后做:
$ while read $server; do ssh user@$server "command args"; done < servers.txt