GNU/Linux >> Linux の 問題 >  >> Linux

SSH 経由の Rsync で tty が存在しない

解決策 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 をチェック .


Linux
  1. Ssh、Sudo、それからダウンロード?

  2. Sudoを介してSsh上でスクリプトファイルを実行しますか?

  3. Ssh – FirefoxがSshよりも遅いのはなぜですか?

  1. LinuxでSSHを使い始める

  2. 方法:Ansibleを使い始める

  3. ssh 経由でディレクトリを比較する方法

  1. Ssh – Sshを介してStdoutをリダイレクトしますか?

  2. sudoers NOPASSWD:sudo:tty が存在せず、askpass プログラムが指定されていません

  3. ソックスではなく、ssh 経由の http プロキシ