Проблема решена:
$ 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
Sigh. столько за вознаграждение в 100 рупий я надел :)
Сначала я попробую это.
$ 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»).
???
канал 2: сбой при открытии: сбой подключения: отказ в подключении
В user @ host
нет ничего, что прослушивает порт 7000, это просто, и это все.
"... очевидно, 'localhost' не понравился удаленному хосту. Тем не менее, удаленный / etc / hosts содержит:"
За исключением того, что вы запускали ssh на клиенте, поэтому «localhost» не понравился вашему клиенту. Файл удаленного / etc / hosts предназначен для удаленного подключения из , а не для входящих подключений.
Хотя проблема 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
вызывает такие ошибки:
канал 2: ошибка открытия: ошибка подключения: соединение отклонено
Решение:
ssh -f root@192.168.0.18 -L 51005:[::1]:51005 -N
IPv6-адрес должен быть в квадратных скобках.
Я столкнулся с этой же ошибкой при попытке подключиться к mysql на другом сервере через ssh туннель. Я обнаружил, что параметр bind-address находится в /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
, который позволял бы соединяться откуда угодно (поэтому он не настолько безопасен, используйте его экономно)
.Для меня добавление ":" работает, поэтому команда в вашем случае будет выглядеть так:
ssh -L :7000:localhost:7000 user@host -N -v
Я получил такое же сообщение об ошибке:
канал 3: open failure: connect failure: Соединение отказало
И причиной была человеческая ошибка - я пытался получить доступ к другому порту на удаленном хосте, чем тот, который я указал.
Просто подумал, что поделюсь этим, хотя, наверное, это не является причиной, по которой большинство из вас испытывают эту ошибку.
Я пробовал ssh -L <порт>:
, когда мне нужно делали ssh -L
.
Надеюсь, это кому-то поможет!
Альтернативная интерпретация: в моем случае, вы неправильно набрали.
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: Я дополняю это, чтобы у нас был полный список возможных проблем при устранении тех же симптомов.
Отсутствует IP-адрес - ip = nnnn
в конце строки. Вы должны указать, с каким именно IP подключаться.
В интересах тех, кто совершил такую глупую ошибку, как я (ошибку, не упомянутую в других ответах):Убедитесь, что на вашей удаленной машине действительно есть процесс, прослушивающий порт, который вы пытаетесь тоннель к!
Как говорит @Kenster здесь:
Когда вы подключаетесь к порту 8783 в вашей локальной системе, это соединение туннелируется через вашу ссылку ssh на сервер ssh на server.com. Оттуда сервер ssh устанавливает TCP-соединение с локальным портом 8783 и передает данные между туннельным соединением и соединением с целью туннеля. Ошибка «отказ в соединении» исходит от ssh-сервера на server.com, когда он пытается установить TCP-соединение с целью туннеля. «Соединение отклонено» означает, что попытка соединения была отклонена. Самое простое объяснение отказа состоит в том, что на сервере server.com ничто не прослушивает соединения через порт 8783 локального хоста. Другими словами, серверное программное обеспечение, к которому вы пытались туннелировать, не запущено или запущено, но не работает. не слушает этот порт.
Итак, сначала убедитесь, что ваш удаленный процесс запущен, а затем убедитесь, что он действительно прослушивает порт, к которому вы пытаетесь подключиться.
На своем удаленном компьютере вы можете запустить любой из этих (в зависимости от пакетов, доступных в вашем дистрибутиве), чтобы проверить, какие порты прослушиваются:
sudo lsof -i -P -n | grep LISTEN
sudo netstat -tulpn | grep LISTEN
sudo ss -tulpn | grep LISTEN
Если ваша команда ssh -L -N 7000:127.0.0.1:6000 user@host
, и вы можете' Если вы не видите ничего прослушивающего на 6000, то это ваша проблема -вам нужно выяснить, почему процесс не прослушивает порт или порт, который вы ожидаете.