Capistrano (on JRuby) で sudo するには?

Capistrano (v2.9.0) を試したところ、 sudo を実行しようとすると、はじかれてしまった。

sudo: no tty present and no askpass program specified

とのこと。

対策(その1)

Capfile に以下を追加すれば、はじかれなくなった。

default_run_options[:pty] = true

対策(その2)

サーバ側で sudo の設定を変更する方法もある。

$sudo visudo
Defaults visiblepw

ただし、デフォルトで off なものを on に変更することに、どんなリスクが伴うかを認識しておく必要があるだろう。

参考:
http://linuxjm.sourceforge.jp/html/sudo/man5/sudoers.5.html

デフォルトでは、ユーザがパスワードを入力しなければならないときに、使用しているターミナルでエコーの抑制ができなかったら、 sudo は実行を拒否するようになっている。これに対し、 visiblepw フラグが設定されていると、パスワードがスクリーンに表示されてしまう場合でも、sudo はプロンプトを出して、パスワードを求める。