ssh 如何从 tty 接收密码



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

试图理解 sshpass,发现 sshpass 用相同的 pid 分叉一个子进程,然后在子进程下输入密码。

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

出于安全原因,许多程序需要用户以交互方式提供密码。相当多的程序在从stdin读取密码之前使用以下类型的检查:

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

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

SSHpass 只是一个工具:

欺骗SSH认为它正在从交互式用户那里获取密码。[来自 SSHpass 的手册页]

为了愚弄sshsshpass创建并打开一个伪终端,并给出 ssh 的 stdin。 fork()是必需的sshpass因为必须写入密码才能通过伪终端ssh

这样ssh过程的stdin就是终端,isatty测试都将通过。

最新更新