web-dev-qa-db-ja.com

Windows 10から `WSL`パスワードを設定するにはどうすればよいですか?

シナリオ

次のコマンドを使用して、Linux Ubuntu16.04用のWindowsサブシステムの新規インストールを自動的にインストールした後:

lxrun /install /y
lxrun /setdefaultuser exampleUsername /y

新しいインストールは、ユーザー名exampleUsernameでインストールされます。次に、Sudo特権でコマンドを実行したい場合。 yes | Sudo apt updateexampleUsernameのパスワードの入力を2回求められます。

質問

スクリプトを使用してWindows10からそのユーザーパスワードを設定するにはどうすればよいですか?

試行

  1. 次の内容のPowerShell.ps1ファイルを変更するパスワードを作成します。
wsl passwd
wsl testPassword
wsl testPassword

ただし、実行時にパスワードの手動プロンプトが返されます。

PS C:\ twInstall> ./pw.ps1exampleUserのパスワードを変更します。 (現在の)UNIXパスワード:

  1. 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で実行されています。

  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
a.t.

コマンドラインからWSLを実行しても、ログインシェルは作成されません。具体的には、WSLはWindowsの親CMDからPATH環境変数を継承するため、PATHは設定されません。

passwdファイルへのパスを正確に指定する必要があります。これは/usr/bin/passwdである可能性があります(ただし、この古い製品は使用していません)。

別の注意として、コマンドtestPassword testPassword | passwdtestPasswordtestPasswordの2行を渡しませんが、これは必須ではないと思います。

chpasswd コマンドの方が優れています(WSLで使用可能な場合):

echo 'userid:newpasswd' | chpasswd

フルパスを追加することを忘れないでください。これにはSudoマジックが必要になる場合があります。

1
harrymc

これらは必ずしも最小限の手順ではありませんが、次のシステムタイプで検証されます:10 Pro N 64ビット(デスクトップ)、バージョン1709、WSL Ubuntu 16.04.2LTSを使用したビルド16299.192。

ソース: https://www.reddit.com/r/bashonubuntuonwindows/comments/a3ql25/surpress_enter_new_unix_username_for_an_automated/

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"を使用します。詳細については、「manSudo_root」を参照してください。

その出力から、上記の一連のコマンドが実際にユーザー名mypasswordのパスワードtestusernameを設定したと結論付けることができます。

0
a.t.