По соображениям безопасности, многие программы требуют пароль от пользователей в интерактивном режиме.
Довольно много программ используют следующий вид проверки перед считыванием пароля из stdin:
if (isatty(STDIN_FILENO) == 0)
{
exit(EXIT_FAILURE);
}
Таким образом, программа допускает пароль только с терминала. Таким образом он пытается предотвратить ввод неинтерактивного пароля.
sshpass - это просто инструмент для:
обманывает ssh, думая, что он получает пароль от интерактивного пользователя. [из справочной страницы sshpass]
Для обмана ssh
, sshpass
создает и открывает псевдотерминал и дает это для стандартного ввода ssh
. fork()
необходим, потому что sshpass
должен записать пароль для ssh
через псевдотерминал.
Таким образом, stdin
процесса ssh
является терминалом, и тест isatty
будет пройден.