リモートボックスでSudo
を使用してリモートバイナリを実行しようとする場合:
ssh remotehost "Sudo ./binary"
このエラーが表示されます:
Sudo:ttyが存在せず、askpassプログラムが指定されていません
これを回避するにはどうすればよいですか?
EDITこれは間違いなく、そのように提案された質問の複製ではありません。そこの答えは完全に無関係です。実際、sudoersファイルに対するこれらの変更はすでにリモートホストに適用されています。
簡単な方法は、-t
を指定することです:
ssh -t remotehost "Sudo ./binary"
Manページから:
擬似tty割り当てを強制します。これは、リモートマシン上で任意の画面ベースのプログラムを実行するために使用できます。メニューサービスを実装する場合。複数の-tオプションは、sshにローカルttyがない場合でも、ttyの割り当てを強制します。
これがなぜ機能するのかを正確に説明することはできません。より良い方法があるかもしれません。もしそうなら私はそれについて聞きたいです:)
@psusiは、以下のコメントでこれが機能する理由を説明しています。
これを回避するにはどうすればよいですか?
Sudo: no tty present and no askpass program specified
別の方法として、試してください:
Sudo -S ./binary
これにより、標準入力stdinからパスワードを読み取るようにSudoに指示します。
Chroot環境では、これらの他の回答が正しく機能しない可能性があります...おそらく:
例:chroot環境を使用してLinuxまたはブートローダーを手動でインストール/修復する、(ArchlinuxやArch-chrootなど)。
パスワードを読み取る端末/アプリケーションを定義する必要があります。 2つのバリアントがあります。
export Sudo_ASKPASS=/usr/libexec/openssh/ssh-askpass
vim /etc/sudoers
(デフォルトはvisiblepw)Sudo
がrootパスワードを要求しようとしており、疑似ttyが割り当てられていないため、失敗します。
ルートとしてログインするか、/etc/sudoers
(またはSudo visudo
)で次のルールを設定する必要があります。
# Members of the admin group may gain root privileges
%admin ALL=(ALL) NOPASSWD:ALL
次に、ユーザーがadmin
グループ(またはwheel
)に属していることを確認します。
私の場合、sudoersでrootとして使用したいコマンドを指定していなかったため、このエラーを受け取りました。
何かのようなもの
/etc/sudoers.d/myuser
:
myuser ALL=(root) NOPASSWD: \
/bin/ls -la
私のために働いた
また、/ etc/sudoers.dに「Sudo_shutdown」などのファイルを作成して、コンテンツを含めることもできます。
# Allow admins to shutdown without pass
%adm ALL=(ALL) NOPASSWD: /sbin/shutdown
これにより、admグループ内のユーザーはパスワードなしでシャットダウンできます。