
設想
使用指令自動安裝全新安裝的適用於 Linux Ubuntu 16.04 的 Windows 子系統後:
lxrun /install /y
lxrun /setdefaultuser exampleUsername /y
新安裝的使用者名稱是:exampleUsername
。接下來,如果想要執行具有sudo
權限的命令,例如
yes | sudo apt update
,系統會提示輸入exampleUsername
兩次密碼。
問題
如何使用具有密碼的腳本從 Windows 10 設定使用者密碼?
嘗試
- 建立一個更改密碼的 powershell
.ps1
文件,內容如下:
wsl passwd
wsl testPassword
wsl testPassword
但執行時仍會傳回手動輸入密碼的提示:
PS C:\twInstall> ./pw.ps1 更改 exampleUser 的密碼。 (目前)UNIX 密碼:
- 嘗試將密碼兩次透過管道傳輸到 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
.
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」並重新啟動後:
- 首先使用指令將預設使用者設定為 root:
lxrun /setdefaultuser root /y
- 然後使用命令創建另一個用戶(透過將其設定為預設用戶):
lxrun /setdefaultuser testusername /y
- 使用命令切換回 root 使用者:
lxrun /setdefaultuser root /y
- 然後使用指令更改非 root 使用者的密碼:
bash -c "echo 'testusername:mypassword' | chpasswd"
看似相同的命令,正如@harrymc 給出的不能與wsl
它前面的一起使用,但可以與bash -c
.
- 驗證:首先在命令提示字元視窗中實際開啟WSL:
wsl su testusername
- 然後執行一個需要名為以下使用者的密碼的命令
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
。