回答:
簡単な方法は以下を指定すること-t
です:
ssh -t remotehost "sudo ./binary"
manページから:
擬似tty割り当てを強制します。これを使用して、任意の画面ベースのプログラムをリモートマシンで実行できます。これは、たとえばメニューサービスを実装する場合に非常に便利です。複数の-tオプションは、sshにローカルttyがない場合でも、ttyの割り当てを強制します。
これがなぜ機能するかを正確に説明することはできません。より良い方法があるかもしれません。もしそうなら私はそれについて聞きたいです:)
@psusiは、以下のコメントでこれが機能する理由を説明しています。
sudo
は、パスワードの入力を求めるttyが必要であり、実行するコマンドを指定するssh
場合、通常はttyをトリップする可能性のあるバイナリデータを転送する非対話型コマンドの実行に使用されるため、デフォルトでは割り当てられないため、動作します。
これを回避するにはどうすればよいですか?
sudo: no tty present and no askpass program specified
別の方法として、試してください:
sudo -S ./binary
これにより、sudoは標準入力stdinからパスワードを読み取ります。
chroot環境では、これらの他の回答が正しく機能しない可能性があります...おそらく:
例: chroot環境(Archlinuxやarch-chrootなど)を使用して、Linuxまたはブートローダーを手動でインストール/修復します。
パスワードを読み取る端末/アプリケーションを定義する必要があります。2つのバリアントがあります。
export SUDO_ASKPASS=/usr/libexec/openssh/ssh-askpass
vim /etc/sudoers
(デフォルトのvisiblepw)visudo
代わりに使用する方が良いvim /etc/sudoers
でしょうか?
これは失敗します。これsudo
は、rootパスワードの入力を求めているため、疑似ttyが割り当てられていないためです。
ルートとしてログインするか、/etc/sudoers
または(sudo visudo
)で次のルールを設定する必要があります。
# Members of the admin group may gain root privileges
%admin ALL=(ALL) NOPASSWD:ALL
次に、ユーザーがadmin
グループ(またはwheel
)に属していることを確認します。