Как установить пароль `WSL` из Windows 10?

Как установить пароль `WSL` из Windows 10?

Сценарий

После автоматической установки новой версии Windows Subsystems для Linux Ubuntu 16.04 с помощью команд:

lxrun /install /y
lxrun /setdefaultuser exampleUsername /y

новая установка устанавливается с именем пользователя: exampleUsername. Далее, если кто-то хочет выполнить команду с sudoпривилегиями, например yes | sudo apt update, ему дважды предлагается ввести пароль exampleUsername.

Вопрос

Как я могу установить этот пароль пользователя из Windows 10, используя скрипт, в котором есть пароль?

Попытки

  1. Создайте файл PowerShell для смены пароля .ps1со следующим содержимым:
wsl passwd
wsl testPassword
wsl testPassword

Но при выполнении все равно возвращается запрос на ввод пароля вручную:

PS C:\twInstall> ./pw.ps1 Изменение пароля для exampleUser. (текущий) Пароль UNIX:

  1. Попробовал дважды передать пароль в команду passwd с pw.ps1содержимым:
wsl testPassword testPassword | passwd

который возвращает ошибку:

passwd : Термин 'passwd' не распознан как имя командлета, функции, файла сценария или исполняемой программы. Проверьте написание имени или, если был указан путь, проверьте правильность пути и повторите попытку. В C:\twInstall\pw.ps1:1 char:25

  • wsl testtest testtest | пароль
  •                     ~~~~~~
    
    • CategoryInfo: ObjectNotFound: (passwd:String) [], CommandNotFoundException
    • FullyQualifiedErrorId : CommandNotFoundException

Комментарий обратная связь адаптация

В настоящее время скрипты запускаются на Windows 10 Pro N 64 бит (настольный компьютер), версия 1709, сборка 16299.192 с WSL Ubuntu 16.04.2 LTS.

  1. На основеответ, предложенный @harrymc:

3.1 Сначала установите пользователя по умолчанию на root с помощью команды:

lxrun /setdefaultuser root /y

3.2 Затем создайте еще одного пользователя (установив его как пользователя по умолчанию) с помощью команды:

lxrun /setdefaultuser testuser /y

3.3 запустить команду от имени этого пользователя на всякий случай, если в wsl нужно что-то инициализировать для создания пользователя:

wsl echo "hello world"

3.4 Вернитесь к пользователю root с помощью команды:

lxrun /setdefaultuser root /y

3.5 Затем укажите путь к файлу passwd (ручная проверка обнаружила его по адресу: /etc/passwdотсюда:

wsl set path /etc/passwd

3.6 Затем измените пароль для пользователя без прав root с помощью команды:

wsl echo 'testusername:newpasswd' | chpasswd

который возвращает:

«chpasswd» не является внутренней или внешней командой, исполняемой программой или пакетным файлом.

3.7 Повторная попытка с помощью sudo привела к той же ошибке:

wsl sudo echo 'testusername:newpasswd' | chpasswd

возвращает:

«chpasswd» не является внутренней или внешней командой, исполняемой программой или пакетным файлом.

3.8 Поскольку возникли сомнения относительно того, поддерживает ли wsl Ubuntu 16.04.2 LTS функцию chpassword, я попробовал ее вручную в wsl, и никаких ошибок с командой не возникло:

echo 'testusername:newpasswd' | chpasswd

3.9 По-видимому, произошла ошибка при конвертации из:

echo 'testusername:newpasswd' | chpasswd

к:

wsl echo 'testusername:newpasswd' | chpasswd

Я подозреваю, что это связано с ошибками в работе конвейера при запуске команды wsl из cmd или powershell.

решение1

Запуск WSL из командной строки не создает оболочку входа. В частности, PATH не устанавливается, поскольку WSL наследует переменную окружения PATH от родительского CMD Windows.

Вам необходимо указать точный путь к passwdфайлу, который может быть /usr/bin/passwd(но я не использую этот старый продукт).

Еще одно замечание: команда testPassword testPassword | passwdне передает две строки, содержащие testPasswordи testPassword, но я не думаю, что это необходимо.

Thechpasswd Команда лучше (если доступна в WSL):

echo 'userid:newpasswd' | chpasswd

Не забудьте указать полный путь, и для этого может потребоваться немного sudoмагии.

решение2

Это не обязательно минимальные шаги, но они проверены на следующем типе системы: 10 Pro N 64 бит (настольный компьютер), версия 1709, сборка 16299.192 с WSL Ubuntu 16.04.2 LTS,источник здесь.

После включения «WSL» в компонентах Windows и перезагрузки:

  1. Сначала установите пользователя по умолчанию на root с помощью команды:
lxrun /setdefaultuser root /y
  1. Затем создайте еще одного пользователя (установив его как пользователя по умолчанию) с помощью команды:
lxrun /setdefaultuser testusername /y
  1. Вернитесь к пользователю root с помощью команды:
lxrun /setdefaultuser root /y
  1. Затем измените пароль для пользователя без прав root с помощью команды:
bash -c "echo 'testusername:mypassword' | chpasswd"

По-видимому, та же команда,как указано @harrymcне работает с wslпередним, но работает с bash -c.

  1. Проверка: Сначала откройте WSL в окне командной строки:
wsl su testusername
  1. Затем выполните команду, требующую пароль пользователя с именем: testusername:
su testusername

возвращается с неверным паролем:

testusername@DESKTOP-SomeDesktop:/mnt/c/Users/a$ su testusername Пароль: su: Ошибка аутентификации

возвращается с правильным паролем:

testusername@DESKTOP-SomeDesktop:/mnt/c/Users/a$ su testusername Пароль: Чтобы запустить команду от имени администратора (пользователь "root"), используйте "sudo". Подробности смотрите в "man sudo_root".

Из этого вывода можно сделать вывод, что указанная выше последовательность команд действительно устанавливает пароль mypasswordдля имени пользователя testusername.

Связанный контент