解決策 1:
物事を難しく考えすぎることもあります。
Rsync がリモート システムにインストールされていません。
/フェイスパーム
解決策 2:
これをここに置いて、このトリックを覚えて共有できるようにします:
rsync -av -e "ssh -tt" --rsync-path="stty raw -echo; sudo /usr/bin/rsync" [email protected]${HOSTNAME}:/ ${DEST_DIR}
このメソッドは、一部のシステムのデフォルト /etc/sudoers
で強制される tty の要件をバイパスしているようです。 Defaults requiretty
のファイル .この情報は、この SO の質問と回答を確認した後に作成されました。
その回答では、 Defaults requiretty
を削除することをお勧めします /etc/sudoers
から .これはより簡単な方法です。ただし、リモート ホスト /etc/sudoers
を変更できない場合は、 この構成オプションを削除するには、ローカルの rsync
を強制してみてください ssh -tt
を使用する . ssh
のこのオプション ssh
に記述されています 次のようなクライアント マニュアル ページ:
疑似端末割り当てを強制します。これは、リモート マシン上で任意の画面ベースのプログラムを実行するために使用できます。メニュー サービスを実装する場合。ssh にローカル tty がない場合でも、複数の -t オプションにより強制的に tty が割り当てられます。
したがって、エラーを回避するために、ssh に疑似 tty を割り当てるように強制します:
Pseudo-terminal will not be allocated because stdin is not a terminal.
stty: standard input: Inappropriate ioctl for device
sudo: sorry, you must have a tty to run sudo
次に、--rsync-path
以下を実行するコマンドでオーバーライドされます:
stty raw -echo; sudo /usr/bin/rsync
stty raw -echo
リモート端末の回線規律をパススルーに設定することです。これにより、効果的に -tt
のない疑似端末の代わりに使用されるパイプのように動作します。 .
次に、リモート rsync コマンドは sudo /usr/bin/rsync
になります これは疑似 tty を持ち、requiretty
を渡します。 sudo
をチェック .