gpt4 book ai didi

linux - 为什么 "yes yes | ssh hostname"不能自动对主机 key 身份验证回答是?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:27:41 32 4
gpt4 key购买 nike

ssh hostname 提示

The authenticity of host 'foobar' can't be established.
ECDSA key fingerprint is ...
Are you sure you want to continue connecting (yes/no)?

我很想知道为什么命令:

yes yes | ssh hostname

不能自动回答这个问题。提示仍然出现并等待标准输入的输入。 “yes”不应该从yes 程序的stdout 发送到ssh 程序的stdin 吗?我想更深入地了解这里发生了什么,以及为什么这不起作用。

澄清一下,我对实际解决绕过提示的问题不感兴趣。我纯粹有兴趣了解为什么从根本上说这是行不通的。可能我完全误解了标准的工作原理,我想了解实际情况。

最佳答案

标准输入和交互式终端键盘输入之间存在差异。这也是您无法向 sudo 提示符回显密码的原因。

当您从标准输入中读取内容时,它们是从文件描述符 0(通常的数据管道)或键盘输入中读取的。在终端输入的情况下,您实际上是在与您的伪终端设备 (pty/X) 对话。这是一个很好的拆分,因为您可以执行 cat some_file | 之类的操作。 ssh hostname 并知道它作为数据发送。您不必关心身份验证机制,它会在途中问您许多不同的问题。同样的事情适用于 cat some_data | sudo 命令 - 你不希望数据被视为你的密码,因为你甚至不知道你是否会被要求提供它。您还可以在不将内容回显给用户的情况下阅读内容。

一般的伪终端信息,看看https://en.wikipedia.org/wiki/Pseudoterminalhttps://unix.stackexchange.com/questions/21147/what-are-pseudo-terminals-pty-tty

如果你想以这种方式与 ssh 交互,你需要使用(例如)expect .或者,直接将签名附加到您的 known_hosts(ssh-keyscan 将为您提供正确的行),或使用 ssh -o StrictHostKeyChecking=no,UserKnownHostsFile=/dev/null hostname

从安全的角度来看,这些都是糟糕的想法。如果你想摆脱最初的问题,你可以 publish the key in dns , 或使用 host certificates .

关于linux - 为什么 "yes yes | ssh hostname"不能自动对主机 key 身份验证回答是?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33772000/

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