如何在 Windows 10 中設定「WSL」密碼?

如何在 Windows 10 中設定「WSL」密碼?

設想

使用指令自動安裝全新安裝的適用於 Linux Ubuntu 16.04 的 Windows 子系統後:

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」不被辨識為 cmdlet、函數、腳本檔案或可操作程式的名稱。檢查名稱的拼寫,或如果包含路徑,請驗證路徑是否正確,然後重試。在 C:\twInstall\pw.ps1:1 字元:25

  • wsl 測試測試測試測試 |密碼
  •                     ~~~~~~
    
    • 類別資訊:ObjectNotFound:(密碼:字串)[],CommandNotFoundException
    • FullQualifiedErrorId: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

我懷疑這是由於從 cmd 或 powershell 運行 wsl 命令時管道工作方式錯誤造成的。

答案1

從命令列執行 WSL 不會建立登入 shell。具體來說,未設定 PATH,因為 WSL 繼承了 Windows 父 CMD 的 PATH 環境變數。

您需要準確指定文件的路徑passwd,這可能是 /usr/bin/passwd(但我沒有使用這個舊產品)。

另請注意,該命令testPassword testPassword | passwd不會傳遞具有testPassword和的兩行testPassword,但我認為這不是必需的。

密碼 命令更好(如果在 WSL 中可用):

echo 'userid:newpasswd' | chpasswd

請記住添加完整路徑,這可能需要一些sudo魔法。

答案2

這些不一定是最少的步驟,但它們在以下系統類型中得到驗證:10 Pro N 64 位元(桌面),版本 1709,使用 WSL Ubuntu 16.04.2 LTS 建置 16299.192,來源在這裡

在 Windows 功能中啟用「WSL」並重新啟動後:

  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從該輸出中,我們可以得出結論,上述命令序列確實為 username設定了密碼testusername

相關內容