sudo:ttyが存在せず、askpassプログラムが指定されていません


73

sudoリモートボックスでリモートバイナリを実行しようとする場合:

ssh remotehost "sudo ./binary"

このエラーが表示されます:

sudo:ttyが存在せず、askpassプログラムが指定されていません

これを回避するにはどうすればよいですか?

編集これは、間違いなく、そのように提案された質問の複製ではありません。そこの答えは完全に無関係です。実際、sudoersファイルに対するこれらの変更は、すでにリモートホストに適用されています。


回答:


78

簡単な方法は以下を指定すること-tです:

ssh -t remotehost "sudo ./binary"

manページから:

擬似tty割り当てを強制します。これを使用して、任意の画面ベースのプログラムをリモートマシンで実行できます。これは、たとえばメニューサービスを実装する場合に非常に便利です。複数の-tオプションは、sshにローカルttyがない場合でも、ttyの割り当てを強制します。

これがなぜ機能するかを正確に説明することはできません。より良い方法があるかもしれません。もしそうなら私はそれについて聞きたいです:)

@psusiは、以下のコメントでこれが機能する理由を説明しています。


14
これsudoは、パスワードの入力を求めるttyが必要であり、実行するコマンドを指定するssh場合、通常はttyをトリップする可能性のあるバイナリデータを転送する非対話型コマンドの実行に使用されるため、デフォルトでは割り当てられないため、動作します。
-psusi

@psusiこの関連質問の答えを知っていますか?unix.stackexchange.com/questions/110841
trusktr

また-tt、heredocを使用してコマンドを渡すときに必要です
Rufus

26

質問:

これを回避するにはどうすればよいですか?

sudo: no tty present and no askpass program specified

別の回答

別の方法として、試してください:

sudo -S ./binary

これにより、sudoは標準入力stdinからパスワードを読み取ります。

これが役立つシナリオ

chroot環境では、これらの他の回答が正しく機能しない可能性があります...おそらく:

  1. / etc / shadowと/ etc / passwdの競合により、ユーザーはパスワードを入力できません。
  2. chrootされた環境では、tty1へのアクセスは少しグリッチになり、ctrl-alt f2-tty2へのアクセスは実行できません。これは、chrootされていない環境のttyであるためです。

例: chroot環境(Archlinuxやarch-chrootなど)を使用して、Linuxまたはブートローダーを手動でインストール/修復します。


sudo -S ./binaryを実行すると、sudo:./binary:command not foundエラーが発生します。
アジットゴエル

5

パスワードを読み取る端末/アプリケーションを定義する必要があります。2つのバリアントがあります。

  1. export SUDO_ASKPASS=/usr/libexec/openssh/ssh-askpass
  2. vim /etc/sudoers (デフォルトのvisiblepw)

11
編集でエラーが発生したためにマシンからロックアウトされる可能性を回避するために、visudo代わりに使用する方が良いvim /etc/sudoersでしょうか?
ドリューノアケス

2

これは失敗します。これsudoは、rootパスワードの入力を求めているため、疑似ttyが割り当てられていないためです。

ルートとしてログインするか、/etc/sudoers または(sudo visudo)で次のルールを設定する必要があります。

# Members of the admin group may gain root privileges
%admin  ALL=(ALL) NOPASSWD:ALL

次に、ユーザーがadminグループ(またはwheel)に属していることを確認します。


これは真実ではありませんが(このことを示す証拠はありません。また、centosおよびubuntuシステムでそのコードを使用している管理グループのユーザーは引き続きエラーを受け取ります)、エスカレートされたタスク
MrMesees 16

2

/etc/sudoers.dに「sudo_shutdown」のようなファイルを作成し、コンテンツを含めることもできます。

# Allow admins to shutdown without pass
%adm ALL=(ALL) NOPASSWD: /sbin/shutdown

これにより、admグループ内のユーザーはパスワードなしでシャットダウンできます。


3
あなたはするつもりでした編集「何のtty存在」カバーしないために、これを
エルダーオタク

2

私の場合、sudoersでrootとして使用したいコマンドを指定していなかったため、このエラーを受け取りました。

何かのようなもの

/etc/sudoers.d/myuser

myuser ALL=(root) NOPASSWD: \
    /bin/ls -la

私のために働いた

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.