公司的ssh2整合了ldap,当ssh登录时密码提示并不能在当前最新版本的sshpass上被捕获,导致无法实现自动输入密码,现在sshpass1.05的版本基础上增加两行代码即可
修改main.c文件:
setsid();
// This line makes the ptty our controlling tty. We do not otherwise need it open
slavept=open(name, O_RDWR );
dup2(slavept,STDERR_FILENO);// 增加错误输出文件描述符重定向到伪终端
close( slavept );
close( masterpt );
char **new_argv=malloc(sizeof(char *)*(argc+1));
改造后在使用ssh的时候最好带上"-o StrictHostKeyChecking=no' 因为原先的sshpass对这种情况是没有做验证的,在ssh2下这里弹出的提示并不是错误输出,验证了多次我始终不能解决让程序自行判断提示自动输入yes。
terminate=ret;
if( terminate ) {
close( slavept );
}
kill(childpid, SIGKILL ); //增加当handleoutput返回的数值大于0,也就是异常的时候直接杀死子进程,避免当在ldap验证的时候密码提示重复输入导致异常