Como você não especifica qual shell, eu apenas trapaceio. Você pode encontrar o seguinte e muito mais em grml.org 's referência do comando zsh-lover man
page.
$ 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
Eu até consegui fazer isso sozinho. Aqui está uma cópia + colar do meu terminal:
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 ~ %
Demorei algumas tentativas - é por isso que o diretório pessoal do dummy já estava lá - mas você pode ver que quando eu executei esse comando esse usuário não existia e criei uma sessão para definindo a senha do dummy . É um roteiro muito desajeitado, mas, quando acabou, consegui fazer o login como fictício .
Então eu acho que é possível. Talvez não aconselhável , mas talvez isso dependa do que você é.