대본
다음 명령을 사용하여 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 테스트테스트 테스트테스트 | 비밀번호
~~~~~~
- CategoryInfo: ObjectNotFound: (passwd:String) [], CommandNotFoundException
- FullyQualifiedErrorId: CommandNotFoundException
댓글 피드백 적응
현재 스크립트는 Windows 10 Pro N 64비트(데스크톱), 버전 1709, 빌드 16299.192( WSL Ubuntu 16.04.2 LTS
.
3.1 먼저 다음 명령을 사용하여 기본 사용자를 루트로 설정합니다.
lxrun /setdefaultuser root /y
3.2 그런 다음 다음 명령을 사용하여 다른 사용자를 만듭니다(기본 사용자로 설정).
lxrun /setdefaultuser testuser /y
3.3 사용자 생성을 위해 wsl에서 초기화해야 할 사항이 있는 경우 해당 사용자로 명령을 실행합니다.
wsl echo "hello world"
3.4 다음 명령을 사용하여 루트 사용자로 다시 전환합니다.
lxrun /setdefaultuser root /y
3.5 그런 다음 passwd 파일의 경로를 설정합니다(수동 검사에서 다음 위치에서 찾았습니다. /etc/passwd
따라서:
wsl set path /etc/passwd
3.6 그런 다음 다음 명령을 사용하여 루트가 아닌 사용자의 비밀번호를 변경하십시오.
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을 실행하면 로그인 셸이 생성되지 않습니다. 특히 WSL은 Windows 상위 CMD에서 PATH 환경 변수를 상속하므로 PATH가 설정되지 않습니다.
파일 경로를 정확하게 지정해야 합니다 passwd
. 그럴 수도 있습니다
/usr/bin/passwd
(그러나 저는 이 이전 제품을 사용하지 않습니다).
또 다른 설명으로 이 명령은 및 testPassword testPassword | passwd
이 있는 두 줄을 전달하지 않지만 이것이 필수라고 생각하지 않습니다.testPassword
testPassword
그만큼chpasswd 명령이 더 좋습니다(WSL에서 사용 가능한 경우).
echo 'userid:newpasswd' | chpasswd
전체 경로를 추가하는 것을 잊지 마세요. 여기에는 약간의 sudo
마법이 필요할 수도 있습니다.
답변2
이는 반드시 최소한의 단계는 아니지만 다음 시스템 유형에서 확인됩니다: 10 Pro N 64비트(데스크톱), 버전 1709, WSL Ubuntu 16.04.2 LTS가 포함된 빌드 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을 엽니다.
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
사용자 이름에 대한 비밀번호를 설정했다는 결론을 내릴 수 있습니다 testusername
.