Насколько я могу судить, это ошибка в WSL. Надеюсь, Microsoft исправит это в следующей сборке. Но сейчас мы можем использовать этот немного уродливый хак.
Обновление № 1: определенно ошибка. Нашел эту проблему на Github. Тир предложил обходной путь перезапуска оболочки, работает и для меня, если вы не хотите проходить через все это.
TL; DR Добавьте это в END вашей конфигурации SSH (обычно находится в ~/.ssh/config
):
Host *
ProxyCommand nc %h %p %r
Вот почему это работает: наша проблема с SSH не связана с брандмауэром, потому что nc
и telnet
работают на одном хосте и порте (попробуйте telnet <host> <port>
или nc <host> <port>
: вы должны увидеть что-то вроде SSH-2.0-OpenSSH_6.6.1p1 Ubuntu-2ubuntu2.7
). Это мы можем использовать в наших интересах.
SSH позволяет использовать прокси, которые принимают стандартный ввод и отправляют его на порт сервера через опцию ProxyCommand
. Обычно это используется для туннелирования в сети к защищенному хосту с использованием промежуточного SSH-сервера бастиона, иногда называемого промежуточным хостом (см. Эту ссылку для получения дополнительной информации).
Этот хак говорит SSH использовать прокси без хоста перехода. Таким образом, он позволяет обойти неудавшееся распределение ресурсов TCP по протоколу SSH, перенося все ресурсы сетевого ресурса на Netcat, который работает. SSH просто выполняет свою функцию SSH без каких-либо сетевых подключений, а Netcat отправляет необработанные данные по TCP-соединению на SSH-сервер.
ВНИМАНИЕ: Так как это изменяет ProxyCommand
для всех хостов, я не знаю, как он взаимодействует с другими конфигурационными хостами SSH, которые используют ProxyCommand
. У меня есть несколько серверов, с помощью которых я могу проверить это, и я обновлю этот ответ результатами. Есть вероятность, что вредных побочных эффектов нет, но я не могу этого гарантировать.
Обновление № 2: Я провел некоторое тестирование с несколькими моими серверами, и это, кажется, работает. SSH использует самую верхнюю запись в конфигурации, когда применяется несколько записей. Таким образом, существующий ProxyCommand
присутствующий выше этого хака, переопределит его. Когда новая команда SSH выполняется, она перечитывает конфигурацию SSH, и, если нет другой ProxyCommand
, SSH использует нашу хакерскую ProxyCommand
, что позволяет применять ее только к "самому внешнему" сеансу SSH. Слово предупреждения: если вы поместите хак в верхнюю часть конфигурационного файла (или над записью, к которой вы пытаетесь использовать SSH), сеансы SSH, для которых требуется ProxyCommand
будут игнорировать другую ProxyCommand
и вместо этого попытаются разрешить адрес хоста. и подключиться напрямую с Netcat.