シナリオ
次のコマンドを使用して、Linux Ubuntu16.04用のWindowsサブシステムの新規インストールを自動的にインストールした後:
lxrun /install /y
lxrun /setdefaultuser exampleUsername /y
新しいインストールは、ユーザー名exampleUsername
でインストールされます。次に、Sudo
特権でコマンドを実行したい場合。 yes | Sudo apt update
、exampleUsername
のパスワードの入力を2回求められます。
質問
スクリプトを使用してWindows10からそのユーザーパスワードを設定するにはどうすればよいですか?
試行
.ps1
ファイルを変更するパスワードを作成します。wsl passwd
wsl testPassword
wsl testPassword
ただし、実行時にパスワードの手動プロンプトが返されます。
PS C:\ twInstall> ./pw.ps1exampleUserのパスワードを変更します。 (現在の)UNIXパスワード:
pw.ps1
contentを使用してパスワードをpasswdコマンドに2回パイプしようとしました:wsl testPassword testPassword | passwd
エラーを返します:
passwd:「passwd」という用語は、コマンドレット、関数、スクリプトファイル、または操作可能なプログラムの名前として認識されません。名前のスペルを確認するか、パスが含まれている場合は、パスが正しいことを確認して、再試行してください。 C:\ twInstall\pw.ps1:1でchar:25 + wsl testtest testtest | passwd + ~~~~~~ + CategoryInfo:ObjectNotFound:(passwd:String)[]、CommandNotFoundException + FullyQualifiedErrorId:CommandNotFoundException
コメントフィードバックの適応
現在、スクリプトはWindows 10 Pro N 64ビット(デスクトップ)、バージョン1709、ビルド16299.192、WSL Ubuntu 16.04.2 LTS
で実行されています。
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コマンドを実行したときの配管の動作エラーが原因であると思われます。
コマンドラインからWSLを実行しても、ログインシェルは作成されません。具体的には、WSLはWindowsの親CMDからPATH環境変数を継承するため、PATHは設定されません。
passwd
ファイルへのパスを正確に指定する必要があります。これは/usr/bin/passwd
である可能性があります(ただし、この古い製品は使用していません)。
別の注意として、コマンドtestPassword testPassword | passwd
はtestPassword
とtestPassword
の2行を渡しませんが、これは必須ではないと思います。
chpasswd コマンドの方が優れています(WSLで使用可能な場合):
echo 'userid:newpasswd' | chpasswd
フルパスを追加することを忘れないでください。これにはSudo
マジックが必要になる場合があります。
これらは必ずしも最小限の手順ではありませんが、次のシステムタイプで検証されます:10 Pro N 64ビット(デスクトップ)、バージョン1709、WSL Ubuntu 16.04.2LTSを使用したビルド16299.192。
Windows機能で「WSL」を有効にして再起動した後:
lxrun /setdefaultuser root /y
lxrun /setdefaultuser testusername /y
lxrun /setdefaultuser root /y
bash -c "echo 'testusername:mypassword' | chpasswd"
@harrymcによって与えられたのと同じコマンドは、その前のwsl
では機能しませんが、bash -c
では機能します。
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"を使用します。詳細については、「manSudo_root」を参照してください。
その出力から、上記の一連のコマンドが実際にユーザー名mypassword
のパスワードtestusername
を設定したと結論付けることができます。