¿Cómo puedo SSH en "Bash en Ubuntu en Windows 10"?

99

Tengo Windows 10 Anniversary Edition con "Bash on Ubuntu on Windows" instalado y funcionando. Me gustaría poder SSH en esta instancia de Ubuntu, pero aunque tengo el servidor openssh instalado y configurado (y escuchando en el puerto 2200), cuando intento ssh a "localhost: 2200", me dice "Servidor inesperadamente conexión de red cerrada ".

¿Alguien ha podido lograr esto con éxito?

ingrese la descripción de la imagen aquí

Mick
fuente
Usando Process Hacker y mirando la pestaña 'Red', muestra que sshd (que se ejecuta en Ubuntu en Windows 10) está escuchando en el puerto local 2200.
Mick
y si intentas conectarte a la dirección IP del sistema? Ubuntu a menudo asigna direcciones de bucle invertido de manera diferente que Windows, y usa valores adicionales en 127.0.0.0/8 (a menudo 127.0.1.1)
Frank Thomas
@Ramhound: No es cierto. Localhost es localhost y todo está compartido. Puede hacerlo perfectamente links http://localhost/desde el subsistema Linux y ver la página web proporcionada por IIS en el lado de Windows. No hay separación
Sami Kuhmonen

Respuestas:

120

Yo tengo que trabajar; así es cómo.

Desinstaló el servidor ssh, lo reinstalé y se aseguró de que haya comenzado con

sudo service ssh --full-restart

Asegúrese de desactivar el acceso de root y agregar otro usuario en el archivo de configuración.

Pude conectarme al subsistema en 127.0.0.1:22 como se esperaba. Espero que esto ayude.

Aquí hay una captura de pantalla.

  1. sudo apt-get purge openssh-server
  2. sudo apt-get install openssh-server
  3. sudo nano /etc/ssh/sshd_config y no permitir el inicio de sesión root configurando PermitRootLogin no
  4. Luego agrega una línea debajo que dice:

    AllowUsers yourusername

    y asegúrese de que PasswordAuthenticationesté configurado en yessi desea iniciar sesión con una contraseña.

  5. Deshabilite la separación de privilegios agregando / modificando: UsePrivilegeSeparation no

  6. sudo service ssh --full-restart

  7. Conéctese a su subsistema Linux desde Windows utilizando un cliente ssh como PuTTY.

Maestro azazel
fuente
2
no tuve que hacer eso, extraño ... pero recuerda que esto todavía está en fase beta, por lo que los resultados pueden variar
Maestro Azazel
77
Además, tuve que: Detener / Deshabilitar los Servicios de Windows 10 SSH Server Broker desde el panel de control de servicios y establecer: PubkeyAuthentication no en sshdconfig
math0ne
66
También necesitaba agregar una regla de firewall. Había una regla existente, pero eso era solo para el Proxy de servidor SSH de Windows, y cuando detuve ese servicio, el firewall bloqueó el tráfico en el puerto 22.
Pierre-Luc Paour
2
También tuve que cambiar los puertos ( Port 2222en el /etc/ssh/sshd_configarchivo), si no el servidor ssh de Windows recogió la conexión en el puerto 22.
apareció el
2
@ArtemRussakovskii detienen todo el subsistema de Linux cada vez que cierras la ventana de bash ...
Sakher
27

Dado que la implementación de Windows no proporciona chroot, debe modificar / etc / ssh / sshd_config

UsePrivilegeSeparation no

También deberá crear un usuario utilizando el comando useradd o algo así.

d1val
fuente
44
Este paso fue esencial para que funcione.
Mick
1
Tenía curiosidad, así que encontré esto en freebsd.org/cgi/man.cgi?sshd_config(5) : UsePrivilegeSeparation:
krs013
Especifica si sshd (8) separa los privilegios creando un proceso hijo sin privilegios para manejar el tráfico de red entrante. Después de una autenticación exitosa, se creará otro proceso que tenga el privilegio del usuario autenticado. El objetivo de la separación de privilegios es evitar la escalada de privilegios al contener cualquier corrupción dentro de los procesos no privilegiados. El argumento debe ser "sí", "no" 'o "sandbox". Si UsePrivilegeSeparation se establece en "sandbox", el proceso sin privilegios previo a la autenticación está sujeto a restricciones adicionales. El valor predeterminado es "sandbox".
krs013
77
WSL implementó chroot en septiembre de 2016 (después de esta respuesta).
GreenReaper
24

Las respuestas de los comités anteriores fueron geniales. Gracias por ellos Y aunque estuvieron muy cerca, todavía tenía problemas de conexión cerrada por 127.0.0.1 .

Encontré y agregué pasos adicionales de esta publicación, lo que me superó. En particular, al comenzar de nuevo y agregar esto como el primer / primer paso (observe el calificador --purge ), finalmente resolvió mi variación de este problema:

sudo apt-get remove --purge openssh-server
sudo apt-get install openssh-server
sudo vi /etc/ssh/sshd_config # Change Port from 22 to 2222 (Just in case MS-Windows is using port 22; which, by the way, SSH on MS-Windows can be disabled if you want to use port 22).
sudo service ssh --full-restart

Gracias de nuevo, espero que esta adición ayude a otros. = :)

NYCeyes
fuente
2
¿Por qué el voto negativo? Estas instrucciones por sí solas no funcionaron en mi caso, como se mencionó, y el paso adicional anterior funcionó. No lo entiendo
NYCeyes
1
Estaba teniendo un error muy diferente "No hay métodos de autenticación compatibles disponibles (servidor enviado: clave pública)" y estos pasos lo arreglaron.
Mike Viens
2
Por alguna razón, Windows simplemente no apreció que estaba ejecutándose en el Puerto 2222. Nunca mostró ningún otro proceso que lo usara, y no hubo evidencia de conflicto de puertos, pero tan pronto como cambié los puertos, comenzó a trabajo.
forresthopkinsa
El puerto 2222 tampoco funciona para mí, ningún otro servicio se está ejecutando, pero 22 funciona, lo cual es un problema ya que quiero tener múltiples conexiones SSH.
mFeinstein
4

Hice todo lo que sugirió el Maestro Azazel y tuve el problema. Cuando me conecté al puerto 22me pidieron una contraseña, pero la contraseña que configuré en el subsistema Linux no funcionó.

Solución n. ° 1:
cambie el puerto SSH /etc/ssh/sshd_configy reinicie el servidor SSH en el subsistema

Solución # 2:
deshabilite / detenga los "Servicios de Broker de Servidor SSH" en el panel de control de servicios de Windows y reinicie el servidor SSH en el subsistema.

scotty86
fuente
1
Esto solo se aplica si tiene algo ejecutándose en Windows en el puerto 22.
Maestro Azazel
3
Ofcz, como puede ver en mi instalación predeterminada de win10, había un servicio ejecutándose el 22 ...
scotty86
2

La razón por la que no puede hacer ssh se muestra en el registro desde el servidor:

chroot ("/ var / run / sshd"): Función no implementada [preauth]

El subsistema Linux no parece tener chroot implementado y el servidor ssh lo necesita, por lo que no se permite la conexión.

Sami Kuhmonen
fuente
3
Lo cual es correcto ... pero las otras respuestas explican cómo solucionar el requisito de chroot.
Mahmoud Al-Qudsi