slappasswd를 자동화하고 싶지만 다음이 작동하지 않습니다.
[root@controller ~]# echo -e "vagrant\nvagrant\n" | slappasswd
New password:
passwd를 자동화할 수 있지만:
[root@controller ~]# echo -e "vagrant\nvagrant\n" | passwd vagrant
Changing password for user vagrant.
New password: BAD PASSWORD: The password is shorter than 8 characters
Retype new password: passwd: all authentication tokens updated successfully.
질문
- 이 메소드가 slappasswd를 자동으로 실행하지 않는 이유는 무엇입니까?
- slappasswd를 자동화하는 방법은 무엇입니까?
답변1
이에 따르면맨페이지비밀번호를 매개변수로 제공할 수 있습니다.
slappasswd -s vagrant
그렇지 않으면 slappasswd는 stdin 대신 tty에서 읽어 새 비밀번호를 얻습니다. 이 경우 expect
talk to it과 같은 것을 사용할 수 있습니다.
답변2
(에 대한 대안내 대답). 단지 stdin을 읽는 것보다 /dev/tty에서 사용자 상호 작용이 필요한 프로그램은 다음을 사용할 수 있습니다.예상되는tcl 언어를 사용하는 명령. 예를 들어 /usr/bin/expect에 Expect가 있다고 가정하면 setuserpw
다음 내용으로 파일을 만듭니다.
#!/usr/bin/expect -f
expect_user -re "(\[^ \]+) (\[^ \]+)\n"
set user $expect_out(1,string)
set pw $expect_out(2,string)
spawn passwd $user
expect "password:"
send "$pw\r"
expect "password:"
send "$pw\r"
expect eof
실행 가능하게 만드는 것을 잊지 마세요
chmod +x ./setuserpw
이 스크립트는 한 줄에 있는 두 단어의 표준 입력을 읽고 변수를 설정합니다 user
. 그런 다음 pw
pseudo-tty를 통해 연결하여 사용자를 위한 프로그램을 실행(생성)합니다 (참고자료 참조). "password:"와 일치하는 프롬프트를 찾는 출력을 읽습니다. 그런 다음 프로그램에 암호를 보내고 동일한 작업을 다시 수행합니다(프로그램이 암호를 두 번 입력하도록 요청한다고 가정). 예를 들어:passwd
man pty
./setuserpw <<!
user1 passwd1
!
귀하의 경우에는 passwd
로 바꾸고 slappasswd
수신된 프롬프트가 이 예의 프롬프트와 일치하는지 확인하십시오.