当所有输入和输出都重定向时,ssh 如何提示输入密码?

当所有输入和输出都重定向时,ssh 如何提示输入密码?

我实际上不需要运行下面的命令,如果我确实想在不输入密码的情况下登录,我知道 ssh 密钥。我只是想知道如何ssh绕过我的文件重定向。

运行以下命令,ssh提示我输入密码:

ssh [email protected] > /dev/null 2> /dev/null < /dev/null

这是如何运作的?stdinstdout、 和stderr都被重定向,但ssh仍然设法在我的屏幕上打印提示并阅读我键入的内容。我尝试添加ssh参数-t -t-T(不是同时添加)来启用或禁用伪 tty 分配,但这没有什么区别。

我也尝试以这种方式关闭所有输入和输出,尽管我不知道我输入是否正确。尽管如此,ssh还是会提示输入密码:

(exec 0<&- 1<&- 2<&- 0>&- 1>&- 2>&-; ssh [email protected])

答案1

来自 OpenSSH readpassphrase.c,第 75 行:

    /*
     * Read and write to /dev/tty if available.  If not, read from
     * stdin and write to stderr unless a tty is required.
     */

该程序直接读取和写入 TTY,因此不可能通过关闭标准输入和输出管道来禁用直接输入。您必须告诉 SSH 客户端使用提供的密码或按照@muru 的建议进行操作。

相关内容