Wie lege ich das WSL-Passwort unter Windows 10 fest?

Wie lege ich das WSL-Passwort unter Windows 10 fest?

Szenario

Nach der automatischen Installation einer Neuinstallation von Windows-Subsystemen für Linux Ubuntu 16.04 mit den Befehlen:

lxrun /install /y
lxrun /setdefaultuser exampleUsername /y

eine Neuinstallation wird mit dem Benutzernamen: durchgeführt . Wenn man anschließend einen Befehl mit Privilegien exampleUsernameausführen möchte , z. B. , wird man zweimal nach dem Passwort gefragt .sudoyes | sudo apt updateexampleUsername

Frage

Wie kann ich das Benutzerkennwort unter Windows 10 mithilfe eines Skripts festlegen, das das Kennwort enthält?

Versuche

  1. Erstellen Sie eine Powershell- .ps1Datei zum Ändern des Kennworts mit folgendem Inhalt:
wsl passwd
wsl testPassword
wsl testPassword

Bei der Ausführung wird jedoch immer noch eine manuelle Eingabeaufforderung für das Kennwort zurückgegeben:

PS C:\twInstall> ./pw.ps1 Passwort für exampleUser ändern. (aktuelles) UNIX-Passwort:

  1. Habe zweimal versucht, das Passwort an den Befehl „passwd“ weiterzuleiten, mit pw.ps1folgendem Inhalt:
wsl testPassword testPassword | passwd

was den Fehler zurückgibt:

passwd: Der Begriff „passwd“ wird nicht als Name eines Cmdlets, einer Funktion, einer Skriptdatei oder eines ausführbaren Programms erkannt. Überprüfen Sie die Schreibweise des Namens oder, falls ein Pfad angegeben wurde, überprüfen Sie, ob der Pfad korrekt ist, und versuchen Sie es erneut. Unter C:\twInstall\pw.ps1:1 char:25

  • wsl testtest testtest | passwd
  •                     ~~~~~~
    
    • CategoryInfo: ObjectNotFound: (passwd:String) [], CommandNotFoundException
    • Vollständig qualifizierte Fehlernummer: CommandNotFoundException

Anpassung des Kommentar-Feedbacks

Derzeit werden die Skripte auf einem Windows 10 Pro N 64-Bit (Desktop), Version 1709, Build 16299.192 mit ausgeführt WSL Ubuntu 16.04.2 LTS.

  1. Bezogen aufdie von @harrymc vorgeschlagene Antwort:

3.1 Legen Sie zunächst mit dem folgenden Befehl den Standardbenutzer auf „root“ fest:

lxrun /setdefaultuser root /y

3.2 Erstellen Sie dann einen weiteren Benutzer (indem Sie ihn als Standardbenutzer festlegen) mit dem folgenden Befehl:

lxrun /setdefaultuser testuser /y

3.3 Führen Sie als dieser Benutzer einen Befehl aus, nur für den Fall, dass für die Erstellung des Benutzers etwas im WSL initialisiert werden muss:

wsl echo "hello world"

3.4 Wechseln Sie mit dem folgenden Befehl zurück zum Root-Benutzer:

lxrun /setdefaultuser root /y

3.5 Legen Sie dann den Pfad zur Passwd-Datei fest (bei manueller Überprüfung wurde dieser hier gefunden: /etc/passwddaher:

wsl set path /etc/passwd

3.6 Ändern Sie dann das Passwort für den Nicht-Root-Benutzer mit dem folgenden Befehl:

wsl echo 'testusername:newpasswd' | chpasswd

was zurückgibt:

„chpasswd“ wird nicht als interner oder externer Befehl, ausführbares Programm oder Batchdatei erkannt.

3.7 Ein erneuter Versuch mit sudo ergab den gleichen Fehler:

wsl sudo echo 'testusername:newpasswd' | chpasswd

kehrt zurück:

„chpasswd“ wird nicht als interner oder externer Befehl, ausführbares Programm oder Batchdatei erkannt.

3.8 Da Bedenken geäußert wurden, ob WSL Ubuntu 16.04.2 LTS über die Fähigkeit von chpassword verfügt, habe ich es anschließend manuell im WSL versucht, was mit dem folgenden Befehl keine Fehler verursachte:

echo 'testusername:newpasswd' | chpasswd

3.9 Offenbar tritt ein Fehler bei der Konvertierung auf von:

echo 'testusername:newpasswd' | chpasswd

Zu:

wsl echo 'testusername:newpasswd' | chpasswd

Ich vermute, dass es an Fehlern in der Funktionsweise der Weiterleitung liegt, wenn Sie einen WSL-Befehl von cmd oder Powershell aus ausführen.

Antwort1

Wenn WSL über die Befehlszeile ausgeführt wird, wird keine Anmeldeshell erstellt. Insbesondere wird der Pfad nicht festgelegt, da WSL die Umgebungsvariable Pfad vom übergeordneten Windows-Befehl CMD erbt.

Sie müssen den genauen Pfad zur passwdDatei angeben, der möglicherweise lautet /usr/bin/passwd(aber ich verwende dieses alte Produkt nicht).

Noch eine Anmerkung: Der Befehl testPassword testPassword | passwdübergibt keine zwei Zeilen mit testPasswordund testPassword, aber ich glaube nicht, dass das erforderlich ist.

Derchpasswd Befehl ist besser (falls in WSL verfügbar):

echo 'userid:newpasswd' | chpasswd

Denken Sie daran, den vollständigen Pfad hinzuzufügen. Möglicherweise ist hierfür ein wenig sudoMagie erforderlich.

Antwort2

Dies sind nicht unbedingt die Mindestschritte, aber sie werden im folgenden Systemtyp überprüft: 10 Pro N 64 Bit (Desktop), Version 1709, Build 16299.192 mit WSL Ubuntu 16.04.2 LTS,Quelle hier.

Nach der Aktivierung von „WSL“ in den Windows-Funktionen und einem Neustart:

  1. Legen Sie zunächst mit dem folgenden Befehl den Standardbenutzer auf „root“ fest:
lxrun /setdefaultuser root /y
  1. Erstellen Sie dann einen weiteren Benutzer (indem Sie ihn als Standardbenutzer festlegen) mit dem folgenden Befehl:
lxrun /setdefaultuser testusername /y
  1. Wechseln Sie mit dem folgenden Befehl zurück zum Root-Benutzer:
lxrun /setdefaultuser root /y
  1. Ändern Sie dann das Passwort für den Nicht-Root-Benutzer mit dem folgenden Befehl:
bash -c "echo 'testusername:mypassword' | chpasswd"

Offenbar derselbe Befehl,gegeben von @harrymcfunktioniert nicht mit wsldavor, aber mit bash -c.

  1. Überprüfung: Öffnen Sie zunächst das WSL im Eingabeaufforderungsfenster:
wsl su testusername
  1. Führen Sie dann einen Befehl aus, der ein Kennwort des Benutzers mit dem Namen erfordert: testusername:
su testusername

gibt das falsche Passwort zurück:

testusername@DESKTOP-SomeDesktop:/mnt/c/Users/a$ su testusername Passwort: su: Authentifizierung fehlgeschlagen

gibt mit dem richtigen Passwort zurück:

testusername@DESKTOP-SomeDesktop:/mnt/c/Users/a$ su testusername Passwort: Um einen Befehl als Administrator (Benutzer „root“) auszuführen, verwenden Sie „sudo “. Weitere Informationen finden Sie unter „man sudo_root“.

Aus dieser Ausgabe kann man schließen, dass die obige Befehlsfolge tatsächlich das Passwort mypasswordfür den Benutzernamen festgelegt hat testusername.

verwandte Informationen