Windows 10 Подсистема Linux SSH клиент Ресурс временно недоступен

27

Я пытаюсь подключиться к моему удаленному серверу в рамках подсистемы 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 и не знаю, как интерпретировать это сообщение. Какой ресурс недоступен и что я должен сделать, чтобы сделать его доступным?

Келл
источник
Первое предположение: брандмауэр Windows? ps> и добро пожаловать на суперпользователя :) Гугль немного похоже вместо этого связан с форком. Пожалуйста, отредактируйте сообщение и добавьте командную строку, которая выдаст вам эту ошибку.
Хастур
просто проверить, что вы используете сборку Insider Preview для Windows 10, потому что AFAIK подсистема Linux доступна только в этой версии, а не на «нормальной» Windows 10. В противном случае, возможно, вы используете Cygwin?
gogoud
@ggoud - я обновил вопрос, чтобы включить операционную систему. Это действительно версия Insider Preview.
Келл
2
У меня также есть эта проблема. Влияет на все программы, поддерживаемые ssh, такие как gitandapt-get
scicalculator

Ответы:

11

Насколько я могу судить, это ошибка в WSL. Надеюсь, Microsoft исправит это в следующей сборке. Но сейчас мы можем использовать этот немного уродливый хак.

Обновление № 1 : определенно ошибка. Нашел эту проблему на Github. Тир предложил обходной путь перезапуска оболочки, работает и для меня, если вы не хотите проходить через все это.

TL; DR Добавьте это в КОНЕЦ вашей конфигурации 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, требующие a, ProxyCommandбудут игнорировать другой ProxyCommandи вместо этого попытаться разрешить адрес хоста и подключиться напрямую с Netcat.

computergeek125
источник
Спасибо за подробности @ computergeek125. К сожалению, даже после настройки конфигурации, как было предложено, я все равно получаю то же сообщение ssh: connect to host domain.com порт 22: Ресурс временно недоступен Когда я запускаю nc -v <host> <port>, для подробного вывода я получаю та же ошибка: ресурс временно недоступен. Возможно, я что-то делаю не так, не уверен. Поскольку у меня нет проблем с ssh при использовании оболочки Git bash, я буду придерживаться этого сейчас. Кстати, моя система сейчас находится в сборке 14393, так что, если это была ошибка в версии на момент вопроса, это все еще ошибка 27 сборок позже.
Келл
Ну, это интересно. Я должен сделать некоторые исследования в этой сборке. В то время у меня было 14903 (сейчас до 14905). Это может быть что-то, что они исправили в сборке, которую я имею.
computergeek125
Как мне отредактировать конфигурацию SSH? В консоли bash для Windows я попытался vi ~/.ssh/configоткрыть пустой файл. Я вставил ваши команды, но когда я пытаюсь сохранить (esc ->: -> wq), это говорит мне"~/.ssh/config" E212: Cannot open file for writing
Dan
Хорошо, это странно. Какую сборку Windows вы используете, и каков ее результат ls -al ~/.ssh?
computergeek125
3

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

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

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

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

Эндрю Джонс
источник
0

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

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

andrerpena
источник
Сама Windows 10 имеет брандмауэр. Почему ты это предложил?
Biswapriyo
Я предлагаю это для будущих пользователей с
такими