Внезапно (читай: без изменения каких-либо параметров) моя виртуальная машина 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
Странный