gpt4 book ai didi

unix - 为什么 SSH 不能在 stdin 上使用管道密码?

转载 作者:行者123 更新时间:2023-12-04 20:02:39 29 4
gpt4 key购买 nike

在典型的 Unix 系统上,如果我尝试通过管道将原始密码传递到 SSH,我将收到类似

的错误
$ echo password | ssh user@host
Pseudo-terminal will not be allocated because stdin is not a terminal.

完全相同的事情将适用于键盘输入,据我所知,键盘输入以完全相同的方式通过标准输入提供。

我对将原始密码传递给 SSH 不感兴趣(这太糟糕了,原因太多,无法一一列举)

我想了解在这种情况下,来自键盘的标准输入和来自 Unix 管道的标准输入之间有什么不同。

编辑: 我知道 SSH key 的存在以及如何使用它们。我也知道将明文密码传递给 ssh 是个坏主意。这个问题只是关于理解来自管道的标准输入和来自键盘的标准输入之间发生了什么不同。

最佳答案

正如另一个答案中提到的,安全是原因。

从技术角度来看,通过echo password | ssh user@host,您将字符串推送到管道,字符在 ssh 端等待读取。但是大多数密码提示会在显示提示之前截断此输入(并将其修改为不显示字符——稍后描述)。

要回答关于差异的最后一个问题,两者都是某种管道,但是当你在另一端有终端时,你可以使用控制字符与这一端通信,你可以读取/设置终端的特定属性,这两者在 echo 的普通管道上都明显失败。

错误消息是由于当您从终端读取密码时,您修改了终端属性,因此它不会显示写入的字符(所谓的 raw mode )。如果 ssh 程序无法与终端通信,它就会像这样失败。

关于unix - 为什么 SSH 不能在 stdin 上使用管道密码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33159491/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com