¿Cómo configurar la contraseña `WSL` desde Windows 10?

¿Cómo configurar la contraseña `WSL` desde Windows 10?

Guión

Después de instalar automáticamente una instalación nueva de los subsistemas de Windows para Linux Ubuntu 16.04 con comandos:

lxrun /install /y
lxrun /setdefaultuser exampleUsername /y

Se instala una nueva instalación con nombre de usuario: exampleUsername. A continuación, si uno desea ejecutar un comando con sudoprivilegios, por ejemplo yes | sudo apt update, se le solicitará la contraseña exampleUsernamedos veces.

Pregunta

¿Cómo puedo configurar esa contraseña de usuario desde Windows 10 usando un script que tenga la contraseña?

Intentos

  1. Cree un archivo PowerShell para cambiar contraseña .ps1con contenido:
wsl passwd
wsl testPassword
wsl testPassword

Pero eso todavía devuelve una solicitud manual de la contraseña cuando se ejecuta:

PS C:\twInstall> ./pw.ps1 Cambiando la contraseña por ejemploUsuario. (actual) Contraseña UNIX:

  1. Intenté enviar la contraseña dos veces al comando passwd con pw.ps1contenido:
wsl testPassword testPassword | passwd

que devuelve error:

passwd: el término 'contraseña' no se reconoce como el nombre de un cmdlet, función, archivo de script o programa ejecutable. Verifique la ortografía del nombre o, si se incluyó una ruta, verifique que la ruta sea correcta e inténtelo nuevamente. En C:\twInstall\pw.ps1:1 carácter:25

  • prueba prueba prueba prueba prueba wsl | contraseña
  •                     ~~~~~~
    
    • CategoryInfo: ObjectNotFound: (contraseña: Cadena) [], CommandNotFoundException
    • FullyQualifiedErrorId: CommandNotFoundException

Adaptación de comentarios

Actualmente, los scripts se ejecutan en Windows 10 Pro N de 64 bits (escritorio), versión 1709, compilación 16299.192 con WSL Ubuntu 16.04.2 LTS.

  1. Residencia enla respuesta sugerida por @harrymc:

3.1 Primero configure el usuario predeterminado como root con el comando:

lxrun /setdefaultuser root /y

3.2 Luego cree otro usuario (configurandolo como usuario predeterminado) con el comando:

lxrun /setdefaultuser testuser /y

3.3 ejecute un comando como ese usuario en caso de que sea necesario inicializar algo en el wsl para la creación del usuario:

wsl echo "hello world"

3.4 Vuelva al usuario root con el comando:

lxrun /setdefaultuser root /y

3.5 Luego establezca la ruta al archivo passwd (la inspección manual lo encontró en: /etc/passwdpor lo tanto:

wsl set path /etc/passwd

3.6 Luego cambie la contraseña para el usuario no root con el comando:

wsl echo 'testusername:newpasswd' | chpasswd

que devuelve:

'chpasswd' no se reconoce como un comando interno o externo, programa ejecutable o archivo por lotes.

3.7 Al volver a intentar con sudo se produjo el mismo error:

wsl sudo echo 'testusername:newpasswd' | chpasswd

devoluciones:

'chpasswd' no se reconoce como un comando interno o externo, programa ejecutable o archivo por lotes.

3.8 Dado que surgieron dudas sobre si wsl Ubuntu 16.04.2 LTS tenía la capacidad de chpassword, lo probé después en wsl manualmente y no arrojó ningún error con el comando:

echo 'testusername:newpasswd' | chpasswd

3.9 Al parecer ocurre un error en la conversión de:

echo 'testusername:newpasswd' | chpasswd

a:

wsl echo 'testusername:newpasswd' | chpasswd

Sospecho que se debe a errores en el funcionamiento de las tuberías cuando ejecuta un comando wsl desde cmd o powershell.

Respuesta1

La ejecución de WSL desde la línea de comandos no crea un shell de inicio de sesión. Específicamente, la RUTA no está configurada, ya que WSL hereda la variable ambiental PATH del CMD principal de Windows.

Debe especificar exactamente la ruta al passwdarchivo, que podría serlo /usr/bin/passwd(pero no estoy usando este producto antiguo).

Como otra observación, el comando testPassword testPassword | passwdno pasa dos líneas que tienen testPasswordy testPassword, pero no creo que sea necesario.

Elcontraseña El comando es mejor (si está disponible en WSL):

echo 'userid:newpasswd' | chpasswd

Recuerde agregar la ruta completa, y esto podría necesitar algo de sudomagia.

Respuesta2

Estos no son necesariamente los pasos mínimos, pero se verifican en el siguiente tipo de sistema: 10 Pro N 64 bits (escritorio), versión 1709, compilación 16299.192 con WSL Ubuntu 16.04.2 LTS,fuente aquí.

Después de haber habilitado "WSL" en las funciones de Windows y reiniciar:

  1. Primero configure el usuario predeterminado como root con el comando:
lxrun /setdefaultuser root /y
  1. Luego cree otro usuario (configurandolo como usuario predeterminado) con el comando:
lxrun /setdefaultuser testusername /y
  1. Vuelva al usuario root con el comando:
lxrun /setdefaultuser root /y
  1. Luego cambie la contraseña para el usuario no root con el comando:
bash -c "echo 'testusername:mypassword' | chpasswd"

Aparentemente el mismo comando,según lo dado por @harrymcno funciona wsldelante de él, pero sí funciona con bash -c.

  1. Verificación: Primero abra el WSL en la ventana del símbolo del sistema:
wsl su testusername
  1. Luego ejecute un comando que requiere una contraseña del usuario llamado testusername:
su testusername

regresa con la contraseña incorrecta:

testusername@DESKTOP-SomeDesktop:/mnt/c/Users/a$ su testusername Contraseña: su: Fallo de autenticación

regresa con la contraseña correcta:

testusername@DESKTOP-SomeDesktop:/mnt/c/Users/a$ su testusername Contraseña: Para ejecutar un comando como administrador (usuario "root"), utilice "sudo". Consulte "man sudo_root" para obtener más detalles.

A partir de ese resultado, se puede concluir que la secuencia de comandos anterior efectivamente establece la contraseña mypasswordpara el nombre de usuario testusername.

información relacionada