tty
sshを使ってリモートホストのコマンドを sudo で実行しようとしたときのこと。
リモートホストが Ubuntu 9.10 の場合、コマンドを実行しようとしたが、エラーが発生し実行できなかった。tty が割り当てられていないし、askpass プログラムも指定されていない、と。
% ssh 192.168.2.101 'sudo ls ~/' sudo: no tty present and no askpass program specified
リモートホストが Ubuntu 9.04 だと、特にエラーは発生しない。そのかわりに、なんということでしょう、入力したパスワードがそのまま画面に表示されるではありませんか。これを防ぐために新しいバージョンではエラーになるようにしているのだなと納得。
% ssh 192.168.2.100 'sudo ls ~/' [sudo] password for yamamucho: PASSWORD
では、Ubuntu 9.10 ではどうすればいいかというと、エラーメッセージを見る限りでは tty を割り当てるか、 askpass を使えばよさそう。前者の方法だと -t オプションを付けることによって tty を割り当てられる。
% ssh -t 192.168.2.101 'sudo ls ~/'