Como definir a senha `WSL` no Windows 10?

Como definir a senha `WSL` no Windows 10?

Cenário

Depois de instalar automaticamente uma nova instalação de subsistemas Windows para Linux Ubuntu 16.04 com comandos:

lxrun /install /y
lxrun /setdefaultuser exampleUsername /y

uma nova instalação é instalada com nome de usuário: exampleUsername. A seguir, se alguém quiser executar um comando com sudoprivilégios, por exemplo yes | sudo apt update, será solicitada a senha exampleUsernameduas vezes.

Pergunta

Como posso definir a senha do usuário do Windows 10 usando um script que possui a senha?

Tentativas

  1. Crie um .ps1arquivo PowerShell para alteração de senha com conteúdo:
wsl passwd
wsl testPassword
wsl testPassword

Mas isso ainda retorna um prompt manual para a senha quando é executado:

PS C:\twInstall> ./pw.ps1 Alterando a senha para exemploUser. (atual) senha UNIX:

  1. Tentei canalizar a senha duas vezes para o comando passwd com pw.ps1conteúdo:
wsl testPassword testPassword | passwd

que retorna erro:

passwd : o termo 'passwd' não é reconhecido como o nome de um cmdlet, função, arquivo de script ou programa operável. Verifique a ortografia do nome ou, se um caminho foi incluído, verifique se o caminho está correto e tente novamente. Em C:\twInstall\pw.ps1:1 char:25

  • teste wsl teste teste | senha
  •                     ~~~~~~
    
    • CategoryInfo: ObjectNotFound: (passwd:String) [], CommandNotFoundException
    • FullyQualifiedErrorId: CommandNotFoundException

Adaptação de feedback de comentários

Atualmente, os scripts são executados em um Windows 10 Pro N 64 bits (desktop), versão 1709, build 16299.192 com WSL Ubuntu 16.04.2 LTS.

  1. Baseado ema resposta sugerida por @harrymc:

3.1 Primeiro defina o usuário padrão como root com o comando:

lxrun /setdefaultuser root /y

3.2 Em seguida, crie outro usuário (definindo-o como usuário padrão) com o comando:

lxrun /setdefaultuser testuser /y

3.3 execute um comando como esse usuário, caso algo precise ser inicializado no wsl para a criação do usuário:

wsl echo "hello world"

3.4 Volte para o usuário root com o comando:

lxrun /setdefaultuser root /y

3.5 Em seguida, defina o caminho para o arquivo passwd (a inspeção manual encontrou-o em: /etc/passwdportanto:

wsl set path /etc/passwd

3.6 Em seguida, altere a senha do usuário não root com o comando:

wsl echo 'testusername:newpasswd' | chpasswd

que retorna:

'chpasswd' não é reconhecido como um comando interno ou externo, programa operável ou arquivo em lote.

3.7 Tentar novamente com sudo gerou o mesmo erro:

wsl sudo echo 'testusername:newpasswd' | chpasswd

retorna:

'chpasswd' não é reconhecido como um comando interno ou externo, programa operável ou arquivo em lote.

3.8 Como foram levantadas preocupações se o wsl Ubuntu 16.04.2 LTS tinha a capacidade de chpassword, tentei posteriormente no wsl manualmente, o que não gerou nenhum erro com o comando:

echo 'testusername:newpasswd' | chpasswd

3.9 Aparentemente ocorre um erro na conversão de:

echo 'testusername:newpasswd' | chpasswd

para:

wsl echo 'testusername:newpasswd' | chpasswd

Suspeito que seja devido a erros no funcionamento da tubulação quando você executa um comando wsl do cmd ou powershell.

Responder1

Executar WSL na linha de comando não cria um shell de login. Especificamente, o PATH não está definido, pois o WSL herda a variável ambiental PATH do CMD pai do Windows.

Você precisa especificar exatamente o caminho para o passwdarquivo, que pode ser /usr/bin/passwd(mas não estou usando este produto antigo).

Como outra observação, o comando testPassword testPassword | passwdnão passa duas linhas com testPassworde testPassword, mas não acho que isso seja necessário.

Ochpasswd comando é melhor (se disponível no WSL):

echo 'userid:newpasswd' | chpasswd

Lembre-se de adicionar o caminho completo, e isso pode precisar de um pouco de sudomágica.

Responder2

Estas não são necessariamente as etapas mínimas, mas são verificadas no seguinte tipo de sistema: 10 Pro N 64 bits (desktop), versão 1709, build 16299.192 com WSL Ubuntu 16.04.2 LTS,fonte aqui.

Depois de habilitar "WSL" nos recursos do Windows e reiniciar:

  1. Primeiro defina o usuário padrão como root com o comando:
lxrun /setdefaultuser root /y
  1. Em seguida, crie outro usuário (definindo-o como usuário padrão) com o comando:
lxrun /setdefaultuser testusername /y
  1. Volte para o usuário root com o comando:
lxrun /setdefaultuser root /y
  1. Em seguida, altere a senha do usuário não root com o comando:
bash -c "echo 'testusername:mypassword' | chpasswd"

Aparentemente o mesmo comando,conforme fornecido por @harrymcnão funciona wslna frente dele, mas funciona com bash -c.

  1. Verificação: primeiro abra o WSL na janela do prompt de comando:
wsl su testusername
  1. Em seguida, execute um comando que requer uma senha do usuário chamado testusername::
su testusername

retorna com a senha incorreta:

testusername@DESKTOP-SomeDesktop:/mnt/c/Users/a$ su testusername Senha: su: falha de autenticação

retorna com a senha correta:

testusername@DESKTOP-SomeDesktop:/mnt/c/Users/a$ su testusername Senha: Para executar um comando como administrador (usuário "root"), use "sudo". Consulte "man sudo_root" para obter detalhes.

A partir dessa saída, pode-se concluir que a sequência de comandos acima realmente definiu a senha mypasswordpara username testusername.

informação relacionada