我需要在大约 40 台 Kubuntu 13.04 机器上安装一些程序,并且想知道我必须采取哪些选项才能尽可能高效地完成安装。
编辑:我已经设置了存储库,并且机器都是相同的克隆,没有 LDAP 身份验证或集中式服务器。
答案1
任何配置管理软件都可以,这就是它们的用途,我建议看看厨师。这是他们网页上的简介:
Chef 是一个将基础设施转换为代码的自动化平台。停止考虑物理和虚拟服务器。对于 Chef,您真正的资产是使这些服务器及其提供的服务变得栩栩如生的代码。自动化基础设施可以加快您的上市时间,帮助您管理规模和复杂性,并保护您的系统。
无论您的网络是在云端、现场还是混合网络中,Chef 都可以自动化您配置、部署和扩展服务器和应用程序的方式,无论您管理 5 台服务器、5,000 台服务器还是 500,000 台服务器。难怪 Facebook 和 Amazon 等公司选择 Chef 来应对关键任务挑战。
这个视频会有很大帮助: http://www.youtube.com/watch?v=0UXh5EnFZrM
答案2
只是为了扩展拉胡尔的非常好的答案,您可以使用这种方法轻松地设置对每台计算机的无密码访问:
安装
sshpass
在您的本地计算机上:sudo apt-get install sshpass
这将允许您将密码作为命令行参数传递:
sshpass -p '<password>' ssh user@server
创建 ssh 密钥
ssh-keygen -t rsa
您可以通过允许空密码来简化事情(这个答案的其余部分将假设您已经这样做了,如果您的安全考虑禁止这样做,请告诉我,我将进行相应修改)。
创建一个文件,其中包含您感兴趣的所有 IP 及其各自的用户名和密码,每行一个:
1.2.3.4 bob bobs_password 11.22.33.44 hary harrys_password
现在,使用
sshpass
复制您的密钥文件,并且——只要您使用了空密码——允许对所有计算机进行无密码访问:while read ip user pass; do sshpass -p "$pass" ssh ssh-copy-id -i ~/.ssh/id_rsa.pub $user@$ip; done < ips.txt
现在您已经设置了无密码访问,请在每台计算机上安装您的软件(假设可以
$user
运行apt-get
,基本上就是$user
)root
:while read ip user pass; do ssh $user@$ip "apt-get install package; done < ips.txt
答案3
为了长期目标
如果您想要自动化工具来集中管理网络上运行的各种 *nix 风格并管理配置的各个方面,那么您可以查看:
- 木偶
- 厨师
- cfengine3
对于短期目标
apt-get
如果您想要临时解决方案只是通过或安装某些软件包yum
,那么您可以使用 shell 或 perl、python 脚本。
如果您已经设置了无密码身份验证,那么您可以只使用以下脚本:
#!/usr/bin/env bash
Servers_list=/opt/servers_list
PackageName="package-name"
for Host in $(< $Servers_list )
do
echo "Installing package on $Host"
ssh "${Host}" apt-get -y install "${PackageName}"
done
如果您没有无密码身份验证,那么您可以使用python 中的expect
工具或模块。paramiko