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 ~/'