【问题标题】:How does ssh receive password from tty?ssh 如何从 tty 接收密码?
【发布时间】:2019-03-26 06:47:52
【问题描述】:

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

尝试了解sshpass,发现sshpass fork出一个pid相同的子进程,然后在子进程下输入密码。

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

【问题讨论】:

标签: linux ssh tty pty sshpass


【解决方案1】:

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

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

所以程序只允许来自终端的密码。这样它会尝试防止非交互式密码输入。

sshpass 只是一个工具:

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

为了欺骗ssh,sshpass 创建并打开一个伪终端,并将其提供给ssh 的标准输入。需要fork(),因为sshpass 必须通过伪终端向ssh 写入密码。

这样ssh进程的stdin就是一个终端,isatty测试就会通过。

【讨论】:

  • 感谢您的回答,我认为我的表达不是很准确和清楚。 this one 正是我遇到的问题,请看一眼。
猜你喜欢
  • 2010-11-23
  • 2023-03-17
  • 1970-01-01
  • 1970-01-01
  • 2010-09-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多