BLOGTIMES
2009/02/10

sudoが「sudo: sorry, you must have a tty to run sudo」と文句を言うときは

  cli 
このエントリーをはてなブックマークに追加

あるサーバから別のサーバにあるバッチをsshとsudoを組み合わせて使ってキックしようとしたら、sudoが下記のようなメッセージを吐いて実行できませんでした。

sudo: sorry, you must have a tty to run sudo

古いマシンだと同じことをしても怒られないので、最近のRHELやCentOSはsudoの設定が変わってTTYがないとsudoが実行できなくなっているのだろうと予想して、/etc/sudoserをのぞいてみると下記のような行がありました。このDefaults requirettyをコメントアウトすると上記の警告が出ずにじ実行できるようになりました。

/etc/sudoers(一部のみ)

# # Disable "ssh hostname sudo <cmd>", because it will show the password in clear. # You have to run "ssh -t hostname sudo <cmd>". # Defaults requiretty

よりよい解決方法

あまりコメントを読まずに設定を変更してしまったのですが、設定の直上にコメントがあり、これはパスワードが見えてしまうのを防ぐための設定のようなのであまり設定を変更することは好ましくないようです。僕の使っているサーバは、元々パスワード認証は使っていないので特に問題ないと思っているのですが、本筋的にはsshに-tオプションをつけて実行してあげるというのがこの問題への正しい対処方法のようです。sshのmanにも-tをつけると強制的にttyを割り当てるという旨の説明が書かれていました。

man ssh(1)

-t
Force pseudo-tty allocation. This can be used to execute arbitrary screen-based programs on a remote machine, which can be very useful, e.g., when implementing menu services. Multiple -t options force tty allocation, even if ssh has no local tty.

    トラックバックについて
    Trackback URL:
    お気軽にどうぞ。トラックバック前にポリシーをお読みください。[policy]
    このエントリへのTrackbackにはこのURLが必要です→https://blog.cles.jp/item/2919
    Trackbacks
    このエントリにトラックバックはありません
    Comments
    愛のあるツッコミをお気軽にどうぞ。[policy]
    古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
    コメントはありません
    Comments Form

    コメントは承認後の表示となります。
    OpenIDでログインすると、即時に公開されます。

    OpenID を使ってログインすることができます。

    Identity URL: Yahoo! JAPAN IDでログイン