쉘 스크립트를 통해 프로그래밍 방식으로 비밀번호 프롬프트에 응답

쉘 스크립트를 통해 프로그래밍 방식으로 비밀번호 프롬프트에 응답

프로그래밍 방식으로 비밀번호 프롬프트에 응답하고 싶습니다.오직프롬프트가 표시되면 쉘 스크립트를 실행하십시오. 이 작업을 이런 방식으로 자동화하는 것이 가능합니까? 나는 다른 도구를 완전히 피하고 싶습니다. 즉, 없거나 expect유사한 도구를 사용하고 이를 달성하기 위해 간단히 쉘 스크립트를 사용하고 싶습니다.

답변1

지정하지 않으셨기 때문에어느쉘, 그냥 속일게요. 다음과 같은 정보를 찾을 수 있습니다.grml.org~의zsh 연인명령 참조 man페이지.

  $ zmodload zsh/zpty
  $ zpty PW passwd $1
  $ zpty PW passwd $1
# ``-r'': read the output of the command name.
# ``z'' : Parameter
  $ zpty -r PW z '*password:'
# send the to command name the given strings as input
  $ zpty -w PW $2
  $ zpty -r PW z '*password:'
  $ zpty -w PW $2
# The second form, with the -d option, is used to delete commands
# previously started, by supplying a list of their names. If no names
# are given, all commands are deleted. Deleting a command causes the HUP
# signal to be sent to the corresponding process.
  $ zpty -d PW

제가 직접 해본 적도 있어요. 내 터미널에서 복사하여 붙여넣은 내용은 다음과 같습니다.

mikeserv@localhost ~ % :                  
sudo zsh -c '
zmodload zsh/zpty
userdel dummy
useradd -m dummy
zpty dummyadd "passwd dummy"
zpty -r dummyadd nl "*UNIX password:"
zpty -w dummyadd "dummypw^M"
zpty -r dummyadd nl "*UNIX password:"
zpty -w dummyadd "dummypw^M"
zpty -r dummyadd nl "*"
printf %s\\n "$nl"
zpty -d dummyadd
'
userdel: user 'dummy' does not exist
useradd: warning: the home directory already exists.
Not copying any file from skel directory into it.

mikeserv@localhost ~ % ssh dummy@localhost
dummy@localhost's password: 
dummy@localhost ~ % 

몇 번 시도했는데 그 이유는 다음과 같습니다.가짜홈 디렉터리는 이미 있습니다. 하지만 명령을 실행했을 때 사용자가 존재하지 않았고 이를 설정하기 위한 세션을 작성했다는 것을 알 수 있습니다.가짜비밀번호. 꽤 투박한 스크립트이지만 끝나면 로그인할 수 있습니다.가짜.

그래서 가능하다고 봅니다. 아마실현 가능 한, 그러나 목적에 따라 달라질 수 있습니다.

관련 정보