ssh如何从tty接收密码?

时间:2019-03-26 06:47:52

标签: linux ssh tty pty sshpass

我想知道openssh如何在登录时获取密码,原因是我陷入了自动向Linux中类似工具输入密码的麻烦,这需要从tty像ssh这样获取密码。

试图了解sshpass,发现sshpass派生具有相同pid的子进程,然后在子进程下输入密码。

不知道我的猜测是否正确,ssh需要检查正确的pid,因为我无法使用其他进程输入ssh密码来输入当前的tty。

1 个答案:

答案 0 :(得分:1)

出于安全原因,许多程序需要用户交互输入密码。 从stdin读取密码之前,很多程序都使用以下类型的检查:

if (isatty(STDIN_FILENO) == 0)
{
    exit(EXIT_FAILURE); 
}

因此,该程序仅允许从终端输入密码。这样,它会尝试防止输入非交互式密码。

sshpass只是用于以下目的的工具:

  

欺骗ssh以为它是从交互式用户那里获取密码的。 [摘自sshpass的手册页]

对于愚弄sshsshpass创建并打开一个伪终端,并为ssh的stdin提供伪终端。需要fork(),因为sshpass必须通过伪终端向ssh写一个密码。

通过这种方式,stdin的{​​{1}}是终端,并且ssh测试将通过。