パスワードなしで実行するようにSudo
を構成しましたが、ssh 'Sudo Foo'
、まだエラーメッセージが表示されますSudo: sorry, you must have a tty to run Sudo
。
なぜこれが発生し、どうすれば回避できますか?
デフォルトでは、SudoはTTYを要求するように構成されています。つまり、Sudoはログインシェルから実行する必要があります。 SSH呼び出しに-t
スイッチを追加することで、この要件を無効にすることができます。
ssh -t someserver Sudo somecommand
-t
は、疑似ttyの割り当てを強制します。
これをグローバルに実行する場合は、/etc/sudoers
を変更して!requiretty
を指定します。これは、ユーザーごと、グループごと、または包括的なレベルで実行できます。
使用 -t
フラグをssh
に設定すると、tty割り当てが強制されます。
$ ssh luci tty
not a tty
$ ssh luci -t tty
/dev/ttys003
$
私はDockerとCentos 7を使用してこの問題に遭遇しました。
yum install -y Sudo
sed -i -e 's/Defaults requiretty.*/ #Defaults requiretty/g' /etc/sudoers
https://hub.docker.com/r/liubin/fluentd-agent/~/dockerfile でこのハックを見つけました
興味深い代替手段は、FreeIPAまたはIdMを実行してユーザーとsudoerルールを一元管理することです。その後、Sudoルールを作成してオプションを割り当てることができます
!必須
ルールで。その後、コマンドは期待どおりに実行されます。また、単一の構成セットからすべてのサーバーとユーザーを管理できるという利点もあります。
同じ問題がありました。私の場合、解決策は2行でした
myscript=$(cat ssh_test.sh)
ssh -t user@Host "$myscript"
説明:
実行するコマンド(Sudoコマンドを含む)をスクリプトに配置します。 「ssh_test.sh」。
スクリプト全体を「myscript」という変数に読み込みます。
-tを1つだけ使用してsshを呼び出し、コマンドの代わりに変数を指定します。
これ以前は、stdinからの読み取りとヒアドキュメントの使用の組み合わせを使用して問題が発生しました