2012-04-16 109 views
0

我使用capistrano來運行命令。我有基於ssh-key的認證,但每臺機器上都有不同的sudo密碼。Capistrano,sudo命令和多個密碼

我capfile看起來像這樣

default_run_options[:pty] = true 
role :admin, "server1","server2","server3" 

desc "myCommand" 
task :mycommand, :roles=>:admin do 
    run "cd <workdir> && #{sudo} <command>" 
end 

當我運行此我得到下面的輸出:

* executing `myCommand' 
    * executing "cd <workdir> && sudo -p 'sudo password: ' <command>" 
    servers: ["server1", "server2", "server3"] 
    [server2] executing command 
    [server3] executing command 
Password: 
** [out :: server2] 
** [out :: server3] 
    [server1] executing command 
** [out :: server1] 
** [out :: server3] CMD-OUTPUT 
*** [out :: server2] Sorry, try again. 
** [out :: server2] Sorry, try again. 
Password: 
** [out :: server2] 
** [out :: server1] 
** [out :: server2] CMD-OUTPUT 
** [out :: server1] 
** [out :: server1] Sorry, try again. 
** [out :: server1] sudo: 3 incorrect password attempts 
    command finished in 14411ms 
failed: "sh -c 'cd <workdir> && sudo -p '\\''sudo password: '\\'' <command>'" on server1 

顯然Capistrano的假設我有同樣的passwort每個服務器上,這可能嗎?我該如何解決這個問題?

+0

請參閱此問題的答案:http://stackoverflow.com/questions/8241639/multiple-server-deploy-asking-ssh-password-for-each-server – 2012-04-16 16:17:50

+0

我已經有公鑰登錄設置,但我需要sudo。我能以某種方式「不平行」運行嗎? – 2012-04-16 17:17:20

回答

0

對於這樣的自動安裝,最常見的方法是使用沒有設置密碼的SSH密鑰。只有私鑰的所有權足以允許登錄(因此文件本身實際上是密碼)。

您可以通過限制SSH配置中可以連接的密鑰的IP地址以及允許其運行的命令來進一步保護系統,以防萬一文件丟失。

+0

我使用capistrano用於管理目的,不用於部署。所以我需要sudo。就像我說的,我已經設置了公鑰登錄。 – 2012-04-16 17:17:01

0

Capistrano不支持具有不同密碼的多個服務器。而不是將它們全部更改爲不推薦的相同密碼,您可以設置您需要通過sudo運行的某些命令,而不需要相關用戶的密碼。

爲了讓用戶bob sudo准入貓沒有密碼,你將添加到您的sudoers文件:

bob ALL=NOPASSWD: /bin/cat 

顯然有一些安全問題在這裏,但我覺得他們是小於給你蓋用戶全面sudo訪問您的所有箱子。請務必閱讀「man sudoers」並仔細限制使用NOPASSWD允許的命令。

+0

這不是一個好的選擇。有沒有辦法做到串行而不是並行的命令? – 2012-04-17 12:15:37