rsh에 "poll: 프로토콜이 회로 설정에 실패했습니다"가 표시됩니다. 이유는 무엇입니까?

rsh에 "poll: 프로토콜이 회로 설정에 실패했습니다"가 표시됩니다. 이유는 무엇입니까?

처음에는 rsh가 잘 작동했지만 몇 가지 사항을 변경한 후 일부 오류가 표시되었습니다. [변경 사항은 이 질문의 끝에 표시됩니다. 참조] 저도 같은 내용을 공유하고 있습니다.

주문하다

$ /usr/bin/rsh localhost ulimit -n

산출

poll: protocol failure in circuit setup

이 문제에 직면한 후 나는 따라갔습니다.이 링크, 그러나 아무런 도움도 받지 못했습니다.

잘 작동하고 있었는데, 약간의 변경을 했더니 그때부터협회을 클릭하면 위와 같은 출력이 표시됩니다. 이제 모든 변경 사항을 되돌리지만 동일한 출력이 표시됩니다. 왜?

위의 링크를 보고 왼쪽에 표시된 줄은 파일에 추가한 줄입니다.

/etc/pam.d/login:       session    required     pam_limits.so
/etc/pam.d/sshd:        session    required     pam_limits.so
/etc/pam.d/su:          session    required     pam_limits.so
/etc/pam.d/system-auth: session    required     pam_limits.so

여기내가하려는 일에 대한 링크입니다.

편집자 No.1

strace -o log.txt rsh localhost pwd, 일부 출력 라인은 다음과 같습니다.

connect(3, {sa_family=AF_INET, sin_port=htons(514), sin_addr=inet_addr("127.0.0.1")}, 16) = 0
socket(PF_INET, SOCK_STREAM, IPPROTO_IP) = 4
bind(4, {sa_family=AF_INET, sin_port=htons(1022), sin_addr=inet_addr("0.0.0.0")}, 16) = 0
listen(4, 1)                            = 0
write(3, "1022\0", 5)                   = 5
poll([{fd=3, events=POLLIN}, {fd=4, events=POLLIN}], 2, -1) = 1 ([{fd=3, revents=POLLIN|POLLERR|POLLHUP}])
write(2, "poll: protocol failure in circui"..., 40) = 40
close(4)                                = 0
close(3)                                = 0
rt_sigprocmask(SIG_SETMASK, [], [URG], 8) = 0
exit_group(1) 

2번 수정

주문하다 - strace ~/rshd.trace in.rshd

산출

execve("/usr/sbin/in.rshd", ["in.rshd"], [/* 22 vars */]) = 0
brk(0)                                  = 0x2b3054ec2000
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2b303671d000
uname({sys="Linux", node="jhamb.XXX.XXX", ...}) = 0
access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2b303671e000
arch_prctl(ARCH_SET_FS, 0x2b303671e6d0) = 0
--- SIGSEGV (Segmentation fault) @ 0 (0) ---
+++ killed by SIGSEGV +++

답변1

rsh는 매우 특이한 문제가 있는 매우 이상한 프로토콜입니다. (내 생각에는 PASV가 아닌 ftp가 내가 본 유일한 TCP 기반 프로토콜인 것 같습니다.) 서버에 대한 연결을 연 후 서버는 다시 클라이언트에 대한 TCP를 열어야 합니다. 연결하다. 이는 rsh 프로토콜이 일반 TCP 연결을 통해 표준 출력을 반환하고 이상한 백채널 연결을 통해 표준 오류를 반환하기 때문입니다.

분명히, 방화벽이 어디에나 있는 오늘날의 세계에서 이 방법의 효과는 매우 낮습니다. 귀하와 대상 서버 사이의 일부 방화벽이 해당 백채널 연결을 거부하고 있는 것 같습니다. 일부 방화벽에는 이를 허용하는 rsh 프로토콜 상태 추적 기능이 있지만, 가능하더라도 일반적으로 켜지지 않습니다.

이것이 (많은 다른 이유들 중에서) rsh가 죽고 모두가 ssh로 이동한 이유입니다. ssh는 동일한 연결을 통해 여러 출력 스트림을 다중화하도록 설계된 더 나은(더 복잡하긴 하지만) 프로토콜을 가지고 있습니다.

이것이 첫 번째 링크에서 iptables를 끄라고 말하는 이유입니다. 그러면 백채널 연결을 차단하는 방화벽이 비활성화됩니다.

답변2

이유:

문제는 여러 rsh가 동시에 실행되고 있다는 것입니다.

해결책:

rsh를 다시 시작하고,

xinetd 서비스를 다시 시작하세요

관련 정보