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)             = ?

관련 정보