在一个典型的Unix系统上,如果我尝试通过管道将原始密码传递到SSH,我将得到一个错误,如下所示
$ echo password | ssh user@host
Pseudo-terminal will not be allocated because stdin is not a terminal.完全相同的东西将对键盘输入工作,据我所知,键盘输入是以完全相同的方式通过stdin提供的。
我不想把原始密码传递给SSH (这太糟糕了,因为有太多的理由要列出)
我想了解在这种情况下,键盘上的stdin和Unix管道中的stdin之间有什么不同。
编辑:我知道SSH密钥的存在以及如何使用它们。我还知道,将明文密码传递给ssh是个坏主意。这个问题只是关于理解stdin和stdin在管道和键盘之间发生的不同。
发布于 2015-10-16 11:10:28
正如另一个答案所述,安全是原因。
从技术角度来看,通过执行echo password | ssh user@host,可以将字符串推送到管道中,并且字符正在ssh端等待读取。但大多数密码提示在显示提示符(并修改为不显示字符--后面描述)之前截断此输入。
要回答关于差异的最后一个问题,两者都是某种管道,但当另一侧有终端时,您可以使用控制字符与此端通信,并且可以读取/设置终端的特定属性,这两者显然都在echo的普通管道上失败。
错误消息是由这样一个事实引起的:当您从终端读取密码时,您会修改终端属性,因此它将不会显示写好的字符(即原始模式)。如果ssh程序不能与终端通信,它就会像这样失败。
https://stackoverflow.com/questions/33159491
复制相似问题