Windows 10 Linux Subsystem Cliente SSH Recurso no disponible temporalmente

25

Estoy tratando de ingresar a mi servidor remoto dentro del subsistema Linux de Windows 10. Estoy usando MS Windows 10 Home Insider Preview compilación 14366.

Mientras estoy en el símbolo del sistema, escribo:

ssh [email protected]

Unos segundos después de escribir el comando ssh, recibo el siguiente mensaje:

ssh: conectarse al host dominio.com puerto 22: recurso temporalmente no disponible

Puedo conectarme con éxito usando Putty y también usando ssh dentro de Git Bash.

Entonces, eso me lleva a creer que el problema está en mi PC local y más específicamente dentro del subsistema Linux. Todavía soy muy ecológico con el entorno Linux y no estoy seguro de cómo interpretar este mensaje. ¿Qué recurso no está disponible y qué debo hacer para que esté disponible?

kell
fuente
Primera suposición: ¿Firewall de Windows? ps> y bienvenido en superusuario :) Google parece un poco relacionado con fork. Por favor, editar el mensaje y añadir la línea de comandos que le dan este error.
Hastur
relacionado
Ramhound
solo comprobando que está utilizando una compilación de Insider Preview de Windows 10 porque AFAIK el subsistema de Linux solo está disponible en esta versión, no en Windows 10 'normal'. De lo contrario, ¿tal vez está utilizando Cygwin?
gogoud
@ggoud: he actualizado la pregunta para incluir el sistema operativo. De hecho, es la versión de Insider Preview.
kell
2
Yo tambien estoy teniendo este problema. Afecta a todos los programas compatibles con ssh como gityapt-get
scicalculator

Respuestas:

10

Por lo que puedo decir, este es un error en WSL. Con suerte, Microsoft lo solucionará en la próxima versión. Pero por ahora, podemos usar este truco un poco feo.

Actualización n. ° 1 : Definitivamente un error. Encontré este problema en Github. Su solución alternativa para relanzar el shell también funciona para mí si no quieres pasar por todo esto.

TL; DR Agregue esto para FINALIZAR su configuración SSH (generalmente ubicada en ~/.ssh/config):

Host *
    ProxyCommand nc %h %p %r

He aquí por qué funciona: Nuestro tema SSH no es un problema de cortafuegos ya ncy telnettrabajo al mismo host y el puerto (intenta telnet <host> <port>o nc <host> <port>: usted debe ver algo así SSH-2.0-OpenSSH_6.6.1p1 Ubuntu-2ubuntu2.7). Esto lo podemos usar para nuestra ventaja.

SSH permite el uso de proxies que toman la entrada estándar y la envían al puerto del servidor a través de la ProxyCommandopción. Esto normalmente se usa para hacer un túnel en las redes a un host protegido mediante el uso de un servidor SSH de bastión intermedio, a veces llamado host de salto (consulte este enlace para obtener más información).

Este truco le dice a SSH que use un proxy sin host (s) de salto. Por lo tanto, evita la asignación fallida de SSH de recursos TCP al insertar toda la asignación de recursos de red en Netcat, lo que funciona. SSH simplemente hace lo suyo sin conexiones de red, y Netcat envía los datos sin procesar a través de una conexión TCP al servidor SSH.

ADVERTENCIA: Dado que esto modifica ProxyCommandpara todos los hosts, no sé cómo interactúa con otros hosts de configuración SSH que usan ProxyCommand. Tengo algunos servidores con los que puedo probar esto, y actualizaré esta respuesta con los resultados. Existe la posibilidad de que no haya efectos secundarios perjudiciales, pero no puedo garantizarlo.

Actualización n. ° 2: Realicé algunas pruebas con algunos de mis servidores y parece funcionar. SSH utiliza la entrada superior en la configuración cuando se aplican varias entradas. Por lo tanto, un ProxyCommandpresente existente sobre este truco lo anularía. Cuando se ejecuta el nuevo comando SSH, vuelve a leer la configuración SSH y, si no hay otro ProxyCommand, SSH usa nuestro truco ProxyCommand, lo que le permite aplicarse solo a la sesión SSH "más externa". Palabra de advertencia: si coloca el truco en la parte superior del archivo de configuración (o encima de la entrada a la que está intentando hacer SSH), las sesiones SSH que requieren una ProxyCommandignorarán a la otra ProxyCommandy en su lugar intentarán resolver la dirección del host y conectarse directamente con Netcat.

computergeek125
fuente
Gracias por el detalle @ computergeek125. Desafortunadamente, incluso después de configurar la configuración como se sugiere, sigo recibiendo el mismo mensaje ssh: conectar al host dominio.com puerto 22: Recurso temporalmente no disponible Cuando ejecuto nc -v <host> <port>, para una salida detallada, obtengo el mismo error: recurso temporalmente no disponible. Puede que esté haciendo algo mal, no estoy seguro. Como no tengo ningún problema de ssh al usar el shell Git bash, me quedaré con él por ahora. Por cierto, mi sistema ahora está en la compilación 14393, por lo que, si esto era un error en la versión en el momento de la pregunta, todavía es un error 27 compilaciones más tarde.
kell
Bueno eso es interesante. Tendré que investigar un poco sobre esa construcción. Estaba ejecutando 14903 en ese momento (ahora estoy hasta 14905). Puede ser algo que arreglaron en la compilación que tengo.
computergeek125
¿Cómo edito la configuración SSH? En el bash para la consola de Windows probé vi ~/.ssh/configque abrió un archivo vacío. Pegué tus comandos pero cuando intento guardar (esc ->: -> wq) me dice"~/.ssh/config" E212: Cannot open file for writing
Dan
Ok eso es raro. ¿Qué compilación de Windows está ejecutando y cuál es el resultado ls -al ~/.ssh?
computergeek125
3

Esto también fue un problema para mí, resultó que era mi firewall (Symantec) bloqueando todo el tráfico de Internet desde bash.

Parece que es un problema general con proveedores de firewall de terceros que no reconocen el proceso:

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

Cuando desactivé mi firewall, funcionó bien. No puedo encontrar una mejor solución en este momento.

Andrew Jones
fuente
0

En mi caso, recibí este error porque una actualización de Windows causó problemas con mi conmutador Hyper-V . Resulta que el host al que intentaba ssh estaba conectado a ese conmutador, lo que solucionó el restablecimiento de ssh.

MatrixManAtYrService
fuente
0

Para referencia futura, cuando instale Nginx, bloqueará SSH de forma predeterminada con el mensaje de error "Recurso no disponible temporalmente" a menos que usted ...

sudo ufw permitir ssh

andrerpena
fuente
Windows 10 en sí tiene un firewall. ¿Por qué sugieres eso?
Biswapriyo
Estoy sugiriendo que para futuros usuarios con los mismos problemas porque tuve exactamente el mismo problema y fue porque Nginx estaba bloqueando SSH al servidor
andrerpena