コンテキスト
rsync
サーバーのバックアップを設定したいので、次のコマンドを実行します。
rsync -r -e ssh --rsync-path="sudo rsync" [email protected]:/ /backup/
理想的には、このコマンドは私のプライベートSSHキーパスワードを要求してから接続し、rsyncuserのsudoパスワードを要求してからサーバーでrsyncを実行します。しかし、悪名高いエラーが発生しました。
sudo: no tty present and no askpass program specified
/etc/sudoers
だからこれを(を使用して)に追加する必要がありましたがsudo visudo
、これはデフォルトでユーザーにパスワードなしでシステムへの完全な読み書きアクセスを提供しますがrsyncuser
、これは私の好みではありません。
rsyncuser ALL= NOPASSWD:/usr/bin/rsync
質問
sudoに他のTTYからパスワードを読むように指示する方法は?
これにより、rsync
ローカルコンピュータのある端末ウィンドウで実行し、別の端末ウィンドウを使用してサーバーへの(別々の)SSH接続を開き、そこにsudoパスワードを提供できます。
expect
同様のことができると考えられる唯一の方法は、名前付きパイプからパスワードを読み取るスクリプトの周りにsudoを使用し、他の端末でそのパイプに書き込むことです。
注:これは実際の目的ではなく、実験と学習のためのものです。rsyncでsudoを使用する方法を理解しようとしているわけではありません。、私はそれについて見つけることができるすべてを読んだ。
ベストアンサー1
sudo
SUDO_ASKPASS
あなたの場合のように端末で実行されていない場合、または-Aが設定されている場合は、環境変数を読みます。パスワードを取得するために実行コマンドとして使用します。たとえば、
echo -e '#!/bin/sh\nhead -n 1' > ~/bin/reader
chmod a+x ~/bin/reader
export SUDO_ASKPASS="$HOME/bin/reader"
sudo -A echo "I'm root\!"
標準入力ではパスワードの入力を求められ、端末は不要です。
ただし、実行する特定のケースでは、ルートSSHログインを許可する方が良いですが、SSHキーとrsyncに制限されたコマンドのみを使用することをお勧めします。これには良い資料がありますここ。