![如何在多台機器上部署程式](https://rvso.com/image/50576/%E5%A6%82%E4%BD%95%E5%9C%A8%E5%A4%9A%E5%8F%B0%E6%A9%9F%E5%99%A8%E4%B8%8A%E9%83%A8%E7%BD%B2%E7%A8%8B%E5%BC%8F.png)
我需要在大約 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