我想知道 openssh 在登录时如何获取密码,因为我陷入了自动向 linux 中的类似工具输入密码的困境,这些工具需要从 tty(如 ssh)获取密码。
尝试理解sshpass,发现sshpass fork了一个具有相同pid的子进程,然后在子进程下输入密码。
不知道我的猜测是否正确,ssh 需要检查正确的 pid,因为我无法使用另一个进程输入 ssh 密码来标准输入到当前 tty。
最佳答案
出于安全原因,许多程序要求用户以交互方式输入密码。 相当多的程序在从标准输入读取密码之前使用以下类型的检查:
if (isatty(STDIN_FILENO) == 0)
{
exit(EXIT_FAILURE);
}
因此该程序仅允许来自终端的密码。这样它会尝试阻止非交互式密码输入。
sshpass 只是一个工具:
fooling ssh into thinking it is getting the password from an interactive user. [from man page of sshpass]
为了欺骗 ssh
,sshpass
创建并打开一个伪终端,并为 ssh
的标准输入提供该终端。需要 fork()
是因为 sshpass
必须通过伪终端向 ssh
写入密码。
这样ssh
进程的stdin
就是一个终端,isatty
测试就会通过。
关于linux - ssh 如何从 tty 接收密码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55351259/