0

コマンドの実行には capistrano を使用します。私は ssh キー ベースの認証を使用していますが、マシンごとに異なる sudo パスワードを使用しています。

私のキャップファイルは次のようになります

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

どうやらカピストラーノは、すべてのサーバーで同じパスワードを持っていると想定していますが、それは可能ですか? どうすれば修正できますか?

4

2 に答える 2

0

このような自動インストールでは、パスフレーズが設定されていない SSH キーを使用するのが最も一般的です。秘密鍵の所有権だけで、ログインを許可するのに十分です (したがって、ファイル自体が実質的にパスワードになります)。

ファイルが流出した場合に備えて、キーが接続できる IP アドレスと実行を許可するコマンドを SSH 構成で制限することにより、システムをさらに保護できます。

于 2012-04-16T16:12:58.993 に答える
0

Capistrano は、パスワードが異なる複数のサーバーをサポートしていません。それらをすべて同じパスワードに変更するのではなく (推奨されません)、sudo を介して実行する必要がある特定のコマンドを設定して、問題のユーザーのパスワードを要求しないようにすることができます。

ユーザー bob にパスワードなしで cat への sudo アクセスを許可するには、これを sudoers ファイルに追加します。

bob ALL=NOPASSWD: /bin/cat

ここには明らかにいくつかのセキュリティ上の懸念がありますが、キャップユーザーにすべてのボックスへの完全な sudo アクセスを許可するよりも少ないと思います。必ず「man sudoers」を読み、NOPASSWD を使用して許可するコマンドを慎重に制限してください。

于 2012-04-16T21:05:17.123 に答える