17

Я пытаюсь подключиться к моему удаленному серверу в подсистеме Windows 10 Linux. Я использую MS Windows 10 Home Insider Preview build 14366.

В командной строке я набираю:

ssh user@domain.com

Через несколько секунд после ввода команды ssh я получаю следующее сообщение:

SSH: подключение к хосту domain.com порт 22: ресурс временно недоступен

Я успешно могу подключиться, используя Putty, а также используя ssh в Git Bash.

Итак, это наводит меня на мысль, что проблема связана с моим локальным компьютером, а точнее с подсистемой Linux. Я все еще очень хорошо разбираюсь в среде Linux и не знаю, как интерпретировать это сообщение. Какой ресурс недоступен и что я должен сделать, чтобы сделать его доступным?

4 ответа4

6

Насколько я могу судить, это ошибка в 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.

3

Это также было проблемой для меня, оказалось, что это был мой (Symantec) брандмауэр, блокирующий весь интернет-трафик от bash.

Кажется, это общая проблема со сторонними поставщиками брандмауэров, которые не распознают процесс:

https://github.com/Microsoft/BashOnWindows/issues/809

Когда я отключил брандмауэр, он работал нормально. Не могу найти лучшего решения в данный момент.

0

Для дальнейшего использования при установке Nginx он по умолчанию блокирует SSH с сообщением об ошибке "Ресурс временно недоступен", если вы не ...

sudo ufw разрешить ssh

0

В моем случае я получил эту ошибку, потому что обновление Windows вызвало проблемы с моим коммутатором Hyper-V. Оказывается, хост, к которому я пытался подключиться по ssh, был подключен к этому коммутатору - исправление восстановило ssh.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .