For security reasons, many programs requires a password interactively from users.
Quite many programs uses the following kind of check before reading a password from stdin:
if (isatty(STDIN_FILENO) == 0)
{
exit(EXIT_FAILURE);
}
So the program allows password only from a terminal. That way it try to prevent non-interactive password entering.
sshpass is just a tool for:
fooling ssh into thinking it is getting the password from an interactive user. [from man page of sshpass]
For fooling ssh
, sshpass
creates and open a pseudo terminal, and gives that for stdin of ssh
. fork()
is needed because sshpass
must write a password to ssh
via the pseudo terminal.
This way stdin
of ssh
process is a terminal, and isatty
test will be passed.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…