回答:
簡単な方法は以下を指定すること-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-askpassvim /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)に属していることを確認します。