18

私はsshサーバーにログインして、次のようなものを実行しようとしています:

ssh user@domain.com 'sudo echo "foobar"'

残念ながら、私はエラーが発生しています:

sudo: no tty present and no askpass program specified

Google から、環境変数SSH_ASKPASSを設定askpassするか、sudoersファイルに設定するように言われました。私のリモート マシンは Debian 6 で実行されており、パッケージssh-askpassssh-askpass-gnomeをインストールしました。sudoersファイルは次のようになります。

Defaults        env_reset
Defaults        askpass=/usr/bin/ssh-askpass

# User privilege specification
root    ALL=(ALL) ALL
user    ALL=(ALL) ALL

誰かが私が間違っていることと、それをより良くする方法を教えてもらえますか.

4

6 に答える 6

19

このエラー メッセージを取り除くには 2 つの方法があります。簡単な方法は、リモート sudo プロセスに疑似端末を提供することです。オプションでこれを行うことができます-t

ssh -t user@domain.com 'sudo echo "foobar"'
于 2012-04-19T16:18:45.987 に答える
4

TTY を割り当てたり、コマンド ラインに表示されるパスワードを設定したりするのではなく、次のようにします。

次のようにパスワードを出力するシェル ファイルを作成します。

#!/bin/bash

echo "mypassword"

scp次に、次のように使用するノードにコピーします。

scp SudoPass.sh somesystem:~/bin

次にssh、次の操作を行います。

ssh somesystem "export SUDO_ASKPASS=~/bin/SudoPass.sh;sudo -A command -parameter"
于 2014-02-27T05:04:35.710 に答える
2

別の方法は、sudo -S「プロンプトを標準エラーに書き込み、端末デバイスを使用する代わりに標準入力からパスワードを読み取る」ために実行することです (によるとman) とともにcat:

cat | ssh user@domain.com 'sudo -S echo "foobar"'

プロンプトが表示されたら、パスワードを入力するだけです。

利点の 1 つは、リモート コマンドの出力を「[sudo] password for …」なしでファイルにリダイレクトできることです。

cat | ssh user@domain.com 'sudo -S tar c --one-file-system /' > backup.tar
于 2016-11-05T20:22:00.890 に答える
1

Defaults askpass=/usr/bin/ssh-askpass

ssh-askpass には X サーバーが必要なので、端末を提供する代わりに ( -tnosid で提案されているように を介して)、次の方法で X 接続を転送できます-X

ssh -X user@domain.com 'sudo echo "foobar"'

ただし、現在のドキュメントによると、は inではなくasにaskpass設定されています。sudo.confPathsudoers

于 2019-01-03T12:18:52.713 に答える