"채널 2 : 연결 실패"와의 연결을 거부하는 ssh 터널


70

netbsd 가상 머신이 갑자기 (읽기 : 매개 변수를 변경하지 않고) 이상하게 행동하기 시작했습니다. 증상은 ssh 터널링과 관련이 있습니다.

내 노트북에서 다음을 시작합니다.

$ ssh -L 7000:localhost:7000 user@host -N -v

그런 다음 다른 쉘에서 :

$ irssi -c localhost -p 7000

ssh 디버그는 다음과 같이 말합니다.

debug1: Connection to port 7000 forwarding to localhost port 7000 requested.
debug1: channel 2: new [direct-tcpip]
channel 2: open failed: connect failed: Connection refused
debug1: channel 2: free: direct-tcpip: listening port 7000 for localhost port 7000, connect from 127.0.0.1 port 53954, nchannels 3

localhost : 80으로 (원격) 웹 서버에 연결하려고 시도했지만 동일한 결과를 얻었습니다.

원격 호스트는 NetBSD를 실행합니다 :

bash-4.2# uname -a
NetBSD host 5.1_STABLE NetBSD 5.1_STABLE (XEN3PAE_DOMU) #6: Fri Nov  4 16:56:31 MET 2011  root@youll-thank-me-later:/m/obj/m/src/sys/arch/i386/compile/XEN3PAE_DOMU i386

나는 조금 길을 잃었다. tcpdump원격 호스트에서 실행 을 시도한 결과 '나쁜 chksum'을 발견했습니다.

09:25:55.823849 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto TCP (6), length 67, bad cksum 0 (->3cb3)!) 127.0.0.1.54381 > 127.0.0.1.7000: P, cksum 0xfe37 (incorrect (-> 0xa801), 1622402406:1622402421(15) ack 1635127887 win 4096 <nop,nop,timestamp 5002727 5002603>

ssh 데몬을 다시 시작하여 아무 소용이 없었습니다. 아직 재부팅하지 않았습니다. 여기 누군가가 다른 진단을 제안 할 수 있습니다. 가상 네트워크 카드 드라이버 일 수도 있고 누군가 ssh를 루트로 생각했을 수도 있습니다.

아이디어 ..?


1
문제 해결을 위해을 시도하십시오 $ ssh -L 7000:127.0.0.1:7000 user@host -N -v -v. ( "-v"를 최대 3 번 사용하여 상세도를 높일 수 있습니다.) 또한 ssh가 최근에 업데이트되었을 수 있습니까?
Mike Sherrill 'Cat

붙여 넣은 출력 로그는 이미 -v로 수집되었습니다.
lorenzog 2016 년

1
-v를 최대 3 번 사용하여 자세한 정보를 표시 할 수 있습니다. 따라서 ssh -L 7000... -N -v -v(2 v) 또는의 출력을 볼 수 있습니다 ssh -L 7000... -N -v -v -v.
Mike Sherrill 'Cat Recall'4

@ MikeSherrill'CatRecall '속기도 사용할 수 있습니다 : -vvv
jnns

답변:


42

문제 해결됨:

$ ssh -L 7000:127.0.0.1:7000 user@host -N -v -v

... 아마, ' localhost '는 원격 호스트가 좋아하지 않았습니다. 그러나 원격 /etc/hosts에는 다음이 포함됩니다.

::1                     localhost localhost.
127.0.0.1               localhost localhost.

로컬 네트워크 인터페이스가

lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 33184
        inet 127.0.0.1 netmask 0xff000000
        inet6 ::1 prefixlen 128
        inet6 fe80::1%lo0 prefixlen 64 scopeid 0x2

한숨. 100rp의 현상금에 대해 너무 많이 :)


1
아 글쎄, 나는 대답으로 내 의견을 쓰지 않아도됩니다. (ssh가 시스템에서 ipv6 주소를 선호하는지 확인하십시오.)
Mike Sherrill 'Cat Recall'4

글쎄, -v 옵션을 두 배로 제안했지만 새로운 것은 표시되지 않았습니다. 그러나 며칠 후에 출력을 다시 살펴보면 문제를 지적하는 데 도움이되었습니다. 답을 쓰려면 현상금을 기꺼이 줄 것입니다.
lorenzog

1
실제로 중요한 점은 "localhost"를 "127.0.0.1"로 바꾸는 것이 었습니다. 추가적인 "-v"인수는 도움이되었지만, 내가 목표로하는 것은 아닙니다. 감사.
Mike Sherrill 'Cat Recall'4

수퍼 유저의 게시물에 따르면 : superuser.com/questions/346971/ssh-tunnel-connection-refused 특정 주소를 수신하도록 구성된 프로그램은 해당 특정 주소를 수신합니다
jopasserat

1
나를 위해 선행 ":"을 추가하면 귀하의 경우 명령이 다음과 같이 보일 것입니다 : ssh -L : 7000 : 127.0.0.1 : 7000 user @ host -N -v -v
valentt

21

OP의 문제는 이미 해결되었지만 ssh에서 동일한 오류 메시지가 표시되고 다른 사이트에서 해결책을 찾지 못했기 때문에 문제에 대한 해결책을 공유하기로 결정했습니다.

필자의 경우 IPv6에서만 수신하는 서비스에 연결해야했습니다. 나는 시도했다 :

ssh -f root@192.168.0.18 -L 51005 : 127.0.0.1 : 51005 -N
ssh -f root@192.168.0.18 -L 51005 : 로컬 호스트 : 51005 -N

다른 몇 가지 방법이 있지만 작동하지 않았습니다. 연결을 시도 http://localhost:51005하면 다음과 같은 오류 가 발생합니다. channel 2: open failed: connect failed: Connection refused

해결책은 다음과 같습니다.

ssh -f root@192.168.0.18 -L 51005 : [:: 1] : 51005 -N

IPv6 주소는 대괄호 안에 있어야합니다.


1
ssh 설정 파일을 사용한다면 어떨까요? 예 : "LocalForward 로컬 호스트 : 64,160 192.168.1.56:3389"
meffect

나를 위해 선행 ":"을 추가하면 귀하의 경우 명령이 다음과 같이 표시됩니다 : ssh -f root@192.168.0.18 -L : 51005 : 127.0.0.1 : 51005 -N
valentt

9

먼저 이것을 시도합니다.

$ ssh -L 7000:127.0.0.1:7000 user@host -N -v -v

"-v"를 최대 3 번 사용하여 자세한 정보를 표시 할 수 있습니다.

방화벽이 포트 7000을 차단하면 이 오류 메시지 발생할 있지만 이미이를 배제한 것 같습니다. (나중에 독자들이 그것을 배제하지 않았다면의 결과를보십시오 netstat --numeric-ports.)

나는 생각 ssh를 먼저 갱신 다음 IPV6 주소를 인식되었을 때 나는 오래 전에이 오류 메시지가 보았다 있습니다. 나는 그것에 대해 틀릴 수 있습니다. 실험하고 싶다면 IPV6 루프백 주소 "0 : 0 : 0 : 0 : 0 : 0 : 0 : 1"(또는 ":: 1")을 사용해보십시오.


3

"... 확실히 'localhost'는 원격 호스트에 의해 마음에 들지 않았습니다. 그러나 원격 / etc / hosts는 다음을 포함합니다."

클라이언트에서 ssh를 실행하는 것을 제외하고는 클라이언트가 'localhost'를 좋아하지 않았습니다. 원격 / etc / hosts 파일은 원격 연결하기위한 것입니다 밖으로 하지 들어오는 연결.


1
그것은 또한 나에게 혼란 스러웠다. 로컬 컴퓨터에 localhost를 입력하면 로컬에서 해결됩니다
Ahmedov

3

ssh 터널을 통해 다른 서버의 mysql에 연결하는 동안 동일한 오류가 발생했습니다. 대상 서버의 /etc/my.cnf에있는 bind-address 매개 변수가 내부가 아니라 내 외부 IP (이중 NIC 서버)에 바인딩되어 있다는 것을 알았습니다.

bind-address = 127.0.0.1을 설정하면 다음과 같이 ssh 터널을 성공적으로 사용할 수 있습니다.

ssh -N -f -L 3307:127.0.0.1:3306 user@server.name

mysql -h 127.0.0.1 --port=3307 --protocol=TCP -uusername -ppassword

그것은 나를 위해 일했다. 하나의 주소에만 MySQL을 바인딩 할 수 있습니다.
leeand00

3

localhost 대신 전체 도메인 이름으로 포트를 전달할 때이 오류가 발생했습니다 .

ssh -L 5900:host.name.com:5900 x11vnc

포트는 localhost에 대해서만 열렸으므로 완전한 이름의 연결을 수락하려면 바인딩 포트 설명 을 추가해야했습니다 .

ssh -L *:5900:host.name.com:5900 x11vnc

어느 곳에서나 연결할 수 있습니다 (안전하지 않으므로 조금만 사용하십시오).


2

나를 위해 선행 ":"을 추가하면 귀하의 경우 명령이 다음과 같습니다.

ssh -L :7000:localhost:7000 user@host -N -v

너무 많은 시간이 지났고 다시 돌아가서 확인할 수는 없지만, 이것은 훌륭해 보입니다.
lorenzog

1

???

채널 2 : 개방 실패 : 연결 실패 : 연결 거부

에서 user@host포트 7000을 듣고 아무것도, 그 간단하고 그게 다야.


1
그건 사실이 아니야. host : 7000에서 서비스가 실행 중입니다. 나는 또한 다른 서비스로 시도했다.
lorenzog 2016 년

2
아니요, 연결이 끊어집니다.
RickyA

4
@RickyA : 사실은 그렇지 않습니다. 포트가 바인딩되어 있지 않으면 연결이 거부됩니다. 서비스가 실행되지 않는 잘못된 내부 포트를 사용 하여이 오류가 발생했습니다. 실수를 수정하면 오류가 사라졌습니다. 포트에서 수신 대기하는 것이 없으면 오류가 발생한다는 점에서 poige가 맞습니다.
erb

1

같은 오류 메시지가 나타납니다.

채널 3 : 개방 실패 : 연결 실패 : 연결 거부

그리고 원인은 사람의 실수였습니다. 원격 호스트의 다른 포트에 내가 지정한 것과 다른 포트에 액세스하려고했습니다.

이것이 대부분의 사람들 이이 오류를 겪는 이유는 아니지만 아마도 공유 할 것이라고 생각했습니다.


내 경우 : 이것은 내가하고있는 일입니다. 그런 바보 같은 실수이지만 포트를 확인하기 위해이 대답이 필요했습니다. 도
Ken Sharp

1

나를 위해, 내가 ssh -L <port>:<remote server IP>:<port> <login>@<remote server IP>해야했을 때 노력 하고 ssh -L <port>:127.0.0.1:<port> <login>@<remote server IP>있었습니다.

나는 이것이 누군가를 돕기를 바랍니다!


1

내 경우에는 다른 해석이 잘못 입력 한 것입니다.

user@host ~ $ ssh -vvvNL 4444:127.0.0.0.1:4444
...
channel 2: open failed: connect failed: Name or service not known

여기서 발생하는 것은 IP 주소에 0이 너무 많아 유효한 주소가 아닙니다. 따라서 ssh는이를 확인할 수없는 도메인 이름으로 취급합니다. 죄송합니다!

추신 : 나는 이것을 보완하여 동일한 증상을 해결할 때 가능한 문제의 포괄적 인 목록을 얻습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.