이 SSH 터널을 열면:
ssh -nXNT -p 22 localhost -L 0.0.0.0:8984:remote:8983
localhost:8984에서 실행 중인 HTTP 서버에 액세스하려고 하면 다음 오류가 발생합니다.
channel 1: open failed: administratively prohibited: open failed
이 오류는 무엇을 의미합니까? 어떤 기계에서 이 문제를 해결할 수 있나요?
답변1
채널 1: 열기 실패: 관리 금지: 열기 실패
위 메시지는 SSH 서버가 SSH 클라이언트의 사이드 채널 열기 요청을 거부했음을 의미합니다. 이는 일반적으로 에서 발생 -D
하거나 전달된 데이터를 전달하기 위해 SSH 스트림의 별도 채널이 필요하기 때문입니다 -L
.-w
-L
(에도 적용 가능 )을 사용하고 있으므로 -D
SSH 서버가 이 요청을 거부하게 만드는 두 가지 관련 옵션이 있습니다.
AllowTcpForwarding
(Steve Buzonas가 언급했듯이)PermitOpen
이러한 옵션은 에서 찾을 수 있습니다 /etc/ssh/sshd_config
. 다음 사항을 확인해야 합니다.
AllowTCPForwarding
존재하지 않거나, 주석 처리되었거나, 다음으로 설정되었습니다.yes
PermitOpen
존재하지 않거나, 주석 처리되었거나any
[1] 로 설정되었습니다.
또한 SSH 키를 사용하여 연결하는 경우 SSH 키에 해당하는 항목에 OR 문이 ~/.ssh/authorized_keys
없는지 확인해야 합니다 [2] .no-port-forwarding
permitopen
PermitTunnel
-w 옵션을 사용하려는 경우 해당 옵션은 특정 명령과 관련이 없지만 이 주제와 어느 정도 관련이 있습니다.
- [1] 완전한 구문
sshd_config(5)
맨페이지. - [2] 완전한 구문
authorized_keys(5)
맨페이지.
답변2
아주 이상한 경우로, 로컬 터널을 생성하려고 할 때에도 이 오류가 발생했습니다. 내 명령은 다음과 같습니다
ssh -L 1234:localhost:1234 user@remote
문제는 원격 호스트에 /etc/hosts
"localhost" 항목이 없으므로 SSH 서버가 터널 설정 방법을 모른다는 것입니다. 이것은 이 상황에 대한 매우 불친절한 오류 메시지입니다. 마침내 알아내서 기쁘네요.
교훈: 터널의 대상 호스트 이름이 DNS 또는 /etc/hosts
.
답변3
적어도 한 가지 대답은 어떤 이유로 "원격" 시스템에 ssh를 사용하여 액세스할 수 없다는 것입니다. 오류 메시지는 정말 말도 안됩니다.
답변4
ControlPath
이 오류는 ssh 옵션을 사용하고 ControlMaster
여러 클라이언트 연결(한 클라이언트에서 동일한 user@server로) 간에 재사용하기 위해 소켓 연결을 공유할 때 확실히 나타납니다. 너무 많은 연결(그 의미가 무엇이든 제 경우에는 약 20개 연결)을 열면 이 메시지가 나타납니다. 이전 연결을 모두 닫으면 새 연결을 열어 다시 한도에 도달할 수 있습니다.