Linux
 Computer >> コンピューター >  >> トラブルシューティング >> Linux

「sudo: no tty present and no askpass program specified」エラーの対処法

SSH接続中にsudoコマンドを実行した際に表示される「sudo: no tty present and no askpass program specified」というエラーメッセージは、実際の原因を的確に伝えてくれないことで知られています。このメッセージが表示されていても、実は有効なTTYを利用しているケースがほとんどです。また、普段はSSH経由でもsudoパスワードを問題なく入力できているという方も多いでしょう。つまり、このエラーの多くは構文ミスに起因しているのですが、エラーメッセージ自体はその事実に直接触れてはいません。

この問題はSSHそのものに関連しているため、Linux、FreeBSD、macOS、そしてMicrosoft Windows上のCygwinなど、幅広い環境で再現される可能性があります。幸いなことに、対処方法はどのプラットフォームでもほぼ共通しています。

方法1:sshコマンドに-tオプションを追加する

すでにターミナル上で作業している場合でも、sshはそれを認識できていないことがあります。コマンドプロンプトやターミナルエミュレータの中にいるにもかかわらず、sshが引き続きTTY端末を探そうとしている状態です。まずはエラーを再現して確認してみましょう。検証環境として仮想マシンを用意し、ssh user@linuxtest.example 'sudo /var/mail/startup.sh'というコマンドを実行してテストしました。実際に試す際は、ご自身の目的に合わせてホスト名やコマンド部分を読み替えてください。

「sudo: no tty present and no askpass program specified」エラーの対処法

まず、意図したサーバーにログインできているかどうかを確認しましょう。そのうえで、依然として同じエラーメッセージが表示されるかチェックしてください。エラーが続く場合は、通常3回ほどメッセージが表示され、DebianやUbuntuでローカルからsudoを実行するときと同様にパスワード入力を求められることもあります。

この構文エラーを修正するには、sshの直後に-tオプションを追加してみてください。十中八九、これでssh自身に仮想TTYを割り当てさせ、あたかも実端末内で動作しているかのように振る舞わせることができます。コマンドの他の部分を変更する必要はありません。「ssh」という文字列の直後に-tを付け足し、ホスト名と渡すコマンドはそのまま維持するだけです。なお、コマンドの後半でさらにsshを実行する必要がある場合も、この点を念頭に置いておきましょう。

たとえば、ssh -t user@linuxtest.example 'ssh user@linuxtest2.example'のような形式のコマンドで同様のエラーが発生していた場合、最初のsshの後ろに-tオプションを残しておく必要があります。ただし注意点として、2番目のコマンドがデータを生成したり消費したりする用途に変わった場合は、逆に-tを使わない方が適切です。たとえばスクリプトの代わりにcatコマンドを実行するのであれば、端末を割り当てる必要がないため、-tは外してしまって構いません。

方法2:visudoファイルを修正する

このエラーが設定上の問題によって引き起こされている可能性もあります。sudo visudoコマンドを実行してvisudoファイルを編集しましょう。このファイルは必ずvisudoコマンド経由でのみ編集し、他の手段で直接書き換えることは絶対に避けてください。ファイル内に「ALL = NOPASSWD」を含む行があるはずなので、そこには管理者パスワードの入力なしに実行できるコマンドの種類が記述されています。

各行に記載する個々のコマンドは、行末の最後の1つを除いてすべてカンマで区切る必要があります。たとえば「/sbin/poweroff /sbin/start /sbin/stop」のようにカンマなしで並べてしまうと、これらは1つのコマンドとして扱われ、エラーが発生します。同様に、SSH経由で実行したいコマンドがリストに登録されていない場合も、このエラーが表示されます。必要な修正を加えてファイルを保存したら、エラーがまだ再現するかどうかを確認してください。

修正とサービスの再起動を行ってもエラーが解消しない場合は、下の画像にあるコマンドを試し、「PermitTTY」の行の後に「yes」という語が続いていることを確認してください。この行がファイルの最終行である場合は、その後に空行が存在することも確認しましょう。GNU nanoエディタを使用していれば、この作業はデフォルトで自動的に行われます。

「sudo: no tty present and no askpass program specified」エラーの対処法

最後に、エラーメッセージを再度再現させる前に、関連するサービスをすべて再起動しておくことを忘れないでください。

  1. 【解決法】「make: *** No targets specified and no makefile found」エラーの原因と対処方法

    Ubuntu、Debian、Red Hatなど、どのLinuxディストリビューションを使用していても、「make: *** No targets specified and no makefile found. Stop.(ターゲットが指定されておらず、makefileが見つかりません)」というエラーに遭遇することがあります。これはGNU Make全体に関わる一般的な問題であるため、さまざまなUnix系システムで発生する可能性があります。このエラーは、現在の作業ディレクトリに「makefile」または「Makefile」という名前のファイルが存在しないことを意味しています。一見難しそうに思えま

  2. コマンド&コントロール(C2)攻撃とは?仕組みと対策を徹底解説

    ハッカーは、コマンド&コントロール攻撃(C2攻撃)を利用して、ネットワーク全体を乗っ取ったり、個々のコンピュータを「ボット軍団」化して思いのままに操ることができます。最近では、米国が「サイクロプス・ブリンク(Cyclops Blink)」ボットネットに対し、感染デバイスに侵入してマルウェアを削除するという対応を行ったことでも大きな話題となりました。本記事では、C2攻撃の仕組みと、自分自身を守るための具体的な対策について詳しく解説します。 コマンド&コントロール攻撃とは コマンド&コントロール・サイバー攻撃(C2またはC&C)とは、悪意ある攻撃者がPCに侵入し、C2サーバーから感染デバイスへリモ