sshが独自の出力を読み書きするとき、rsyncはsshとどのように機能しますか?

sshが独自の出力を読み書きするとき、rsyncはsshとどのように機能しますか?
$ SSH_AUTH_SOCK= rsync x brick:
Enter passphrase for key '/home/alan/.ssh/id_rsa': 
[email protected]: Permission denied (publickey).
rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: unexplained error (code 255) at io.c(226) [sender=3.1.3]

--rsh.rsh(例:)を使用したrsyncサポートは、メッセージをsshサーバーのrsyncプロセスから来ると誤って解釈せずにどのように書き込むことができますか?

ベストアンサー1

SSHは別のファイル記述子を介してログインパスワードを要求し、読み込み、現在TTYが開いていることを確認します。

ほとんどのプログラムはこの問題を処理します。読むTTYで「エコー」を一時的に無効にしてパスワードが表示されないように、TTYでログインパスワードを設定します。堅牢性を維持するために、プロンプトが同じTTYに書き込まれていることを確認したいと思います。

$ SSH_AUTH_SOCK= strace -f rsync x brick:
...
[pid 26255] openat(AT_FDCWD, "/dev/tty", O_RDWR) = 4
[pid 26255] ioctl(4, TCGETS, {B38400 opost isig icanon echo ...}) = 0
[pid 26255] ioctl(4, SNDCTL_TMR_CONTINUE or TCSETSF, {B38400 opost isig icanon -echo ...}) = 0
...
[pid 26255] write(4, "Enter passphrase for key '/home/"..., 51Enter passphrase for key '/home/alan/.ssh/id_rsa': ) = 51
[pid 26255] read(4, "", 1)              = 0
[pid 26255] write(4, "\n", 1
)           = 1
[pid 26255] ioctl(4, SNDCTL_TMR_CONTINUE or TCSETSF, {B38400 opost isig icanon echo ...}) = 0
...

SSHは、rsyncがプロトコルで使用する標準出力(ファイル番号1を開く)ではなく、標準エラー(ファイル番号2を開く)にエラーメッセージを出力します。

[pid 26255] write(2, "[email protected]: "..., [email protected]: Permission denied (publickey).
) = 64
[pid 26255] exit_group(255)             = ?

おすすめ記事