How does ssh receive password from tty?

社会主义新天地 提交于 2019-12-14 03:34:18

问题


I was wondering how openssh gets the password when login, cause I got stuck in automating entering passwords to the similar tools in linux which requires getting password from tty like ssh.

Tried to understand sshpass and found that sshpass forks a child process with the same pid then enters the password under the child process.

Don't know if my guess was right that ssh needs to check the right pid since I cannot stdin to the current tty using another process to enter the ssh password.


回答1:


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.



来源:https://stackoverflow.com/questions/55351259/how-does-ssh-receive-password-from-tty

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!