makefile を使っていくつかのソースをコンパイルしようとしています。makefile の中には sudo
で実行しなければならないコマンドがたくさんあります。
ターミナルからソースをコンパイルすると、すべてがうまくいき、最初に sudo
コマンドが実行されたときに、パスワードを待つために make が一時停止します。パスワードを入力すると、make は再開して完了します。
しかし、NetBeansでソースをコンパイルできるようにしたいと思います。そこで、プロジェクトを開始し、ソースを見つける場所をnetbeansに示しましたが、プロジェクトをコンパイルすると、エラーが発生します。
sudo: no tty present and no askpass program specified
最初に sudo
コマンドにヒットしました。
インターネットでこの問題を調べてみましたが、見つけたすべての解決策は、このユーザーのパスワードを無効にするという一つのことを指しています。ここで問題となっているユーザーはrootなので、そんなことはしたくありません。それはしたくありません。
他に解決策はありませんか?
パスワードの入力を求められないように、ユーザーにそのコマンドの使用を許可すれば、問題は解決するはずです。まず、シェルコンソールを開き、次のように入力します。
sudo visudo
そして、そのファイルを編集して、一番最後に追加します。
username ALL = NOPASSWD: /fullpath/to/command, /fullpath/to/othercommand
例
john ALL = NOPASSWD: /sbin/poweroff, /sbin/start, /sbin/stop
とすると、ユーザー john
がパスワードを要求されずに sudo poweroff
, start
, stop
を実行できるようになります。
visudo で使用する必要のあるキーストロークについては画面の下部を見てください - ちなみにこれは vi ではありません - そして何か問題の兆候があったら保存せずに終了してください。健康上の警告:このファイルを壊すと深刻な結果になるので、注意して編集してください。
試してみてください。
ssh -t remotehost "sudo <cmd>"
これで、上記のエラーがなくなります。
sudo`はデフォルトでは、接続されたターミナルからパスワードを読み取ります。あなたの問題は、netbeansコンソールから実行した場合、接続されたターミナルがないことです。ですから、パスワードを入力するための別の方法を使用しなければなりません:これはaskpassプログラムと呼ばれています。
それはaskpassプログラムと呼ばれるものです。askpassプログラムは特定のプログラムではなく、パスワードを要求することができるすべてのプログラムです。例えば、私のシステムでは x11-ssh-askpass
がうまく機能しています。
そのためには、環境変数 SUDO_ASKPASS
や sudo.conf
ファイル(詳細は man sudo
を参照)で、使用するプログラムを指定する必要があります。
オプション -A
を使用すると、sudo
に askpass プログラムを使用させることができます。デフォルトではターミナルが接続されていない場合にのみ使用されます。