Часовий ресурс клієнтської підсистеми підсистеми 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> і ласкаво просимо на суперусер :) Google трохи здається, натомість пов'язаний з вилкою. Будь ласка , змініть пост і додати командний рядок , яка дасть вам цю помилку.
Гастур


просто перевіряйте, що ви використовуєте збірку Insider Preview для Windows 10, оскільки AFAIK підсистема Linux доступна лише в цій версії, а не в 'звичайній' Windows 10. Інакше, можливо, ви використовуєте Cygwin?
gogoud

@ggoud - я оновив питання, щоб включити операційну систему. Це дійсно збірка Insider Preview.
kell

2
У мене теж є таке питання. Це впливає на всі програми, підтримувані ssh, такі як gitіapt-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 використовувати проксі-сервер без хостів. Таким чином, це відбувається навколо невдалого розподілу ресурсів TCH через 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. На жаль, навіть після встановлення конфігурації, як було запропоновано, я все одно отримую те саме повідомлення ssh: підключитися до порту host.com 22: Ресурс тимчасово недоступний Коли я запускаю nc -v <host> <port>, для багатослівного виведення я отримую та сама помилка: ресурс тимчасово недоступний. Я можу робити щось не так, не впевнений. Оскільки у мене не виникає жодних проблем з ssh, використовуючи оболонку Git bash, я зараз дотримуюся цього. До речі, моя система наразі збирається 14393, тому, якщо це була помилка у версії на момент запитання, вона все-таки буде помилкою на 27 версій.
kell

Ну це цікаво. Мені доведеться провести деякі дослідження з цього приводу. Я бігав 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/isissue/809

Коли я відключив брандмауер, він працював нормально. Наразі не можна знайти кращого рішення.



0

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

sudo ufw дозволяють ssh


Сам Windows 10 має брандмауер. Чому ти це запропонував?
Бісвапріо

Я припускаю, що для майбутніх користувачів з тими ж проблемами, тому що у мене була така ж проблема, і це було тому, що Nginx блокував SSH на сервері
andrerpena
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.