Назад | Перейти на главную страницу

туннель ssh отклоняет соединения с "канал 2: открытие не удалось"

Внезапно (читай: без изменения каких-либо параметров) моя виртуальная машина 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 на удаленном хосте, и я обнаружил эти "плохие сообщения":

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.

Идеи ..?

Задача решена:

$ 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

Вздох. столько за награду в 100рп я надел :)

Хотя проблема 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:localhost: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-адрес должен быть в квадратных скобках.

Я бы сначала попробовал это.

$ 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»).

"... очевидно, 'localhost' не понравился удаленному хосту. Однако удаленный / etc / hosts содержит:"

За исключением того, что вы запускали ssh на клиенте, поэтому «localhost» не понравился вашему клиенту. Файл удаленного / etc / hosts предназначен для удаленного подключения вне не входящий соединения.

Я столкнулся с этой же ошибкой при попытке подключиться к mysql на другом сервере через туннель ssh. Я обнаружил, что параметр адреса привязки в /etc/my.cnf на целевом сервере был привязан к моему внешнему IP (серверу с двумя сетевыми адаптерами), а не к внутреннему, в котором я не нуждался.

Когда я установил 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

Я столкнулся с этой ошибкой, когда перенаправлял порты с полное доменное имя вместо localhost:

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

Порт открывался только для localhost, поэтому, чтобы принимать соединения с полностью определенным именем, мне пришлось добавить порт привязки описание:

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

который позволит подключаться из любого места (так что это не так безопасно, используйте его экономно).

???

канал 2: ошибка открытия: ошибка подключения: соединение отклонено

В user@host там ничего не слушает порт 7000, вот и все.

Для меня добавление ":" в начале работает, поэтому команда в вашем случае будет выглядеть так:

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

Альтернативная интерпретация - в моем случае, вы неправильно набрали.

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

Здесь происходит то, что в IP-адресе слишком много нулей, поэтому он недействителен. Таким образом, ssh рассматривает его как доменное имя, которое не может разрешить. Ой!

PS: Я дополняю это, чтобы у нас был полный список возможных проблем при устранении тех же симптомов.

Я получил такое же сообщение об ошибке:

канал 3: ошибка открытия: ошибка подключения: соединение отклонено

Причиной была человеческая ошибка - я пытался получить доступ к другому порту на удаленном хосте, чем тот, который я указал.

Просто подумал, что поделюсь этим, хотя, вероятно, это не причина, по которой большинство из вас сталкивается с этой ошибкой.

Для меня я пытался ssh -L <port>:<remote server IP>:<port> <login>@<remote server IP> когда я должен был делать ssh -L <port>:127.0.0.1:<port> <login>@<remote server IP>.

Я надеюсь, что это поможет кому-то!

Отсутствует IP-адрес --ip=n.n.n.n в конце строки. Вы должны указать, с каким именно IP подключаться.

У меня сработало переключение порядка команд.

Итак, в основном -

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

Странный