在 bash 脚本中回答 yes

在 bash 脚本中回答 yes

我正在尝试通过git clonebash 脚本执行操作,但第一次运行该脚本且服务器未知时,脚本会失败。我有这样的事情:

yes | git clone [email protected]:repo/repoo.git
The authenticity of host 'github.com (207.97.227.239)' can't be established.
RSA key fingerprint is 16:27:ac:a5:76:28:2d:36:63:1b:56:4d:eb:df:a6:48.
Are you sure you want to continue connecting (yes/no)? 

但它忽略了yes.您知道如何强制git clone将密钥添加到已知主机吗?

答案1

将以下内容添加到您的~/.ssh/config文件中:

Host github.com
    StrictHostKeyChecking no

任何使用 open-ssh 客户端建立远程 shell(使用 git 客户端)的操作都应该跳过对 github.com 的密钥检查。

这实际上是一个坏主意,因为任何形式的跳过检查(无论您自动点击“是”还是首先跳过检查)都会为中间人的安全妥协创造空间。更好的方法是known_hosts在需要运行一些自动连接的脚本之前检索并验证指纹并将其存储在文件中。

答案2

yes输出y。 RSA密钥接受需求yes。您可以尝试这样输出而不是.yes yes | git clone [email protected]:repo/repoo.gityesyesy

答案3

在克隆之前运行ssh-keyscan -H github.com >> ~/.ssh/known_hosts将添加密钥并防止出现提示。

当然,这种方法也容易受到 MITM 攻击。

答案4

我以前遇到过这个问题。虽然是在 Windows 机器上,但我们需要使用 ssh 连接到远程主机。我们遇到了同样的问题,第一次连接总是失败,因为它无法识别密钥。

我通过手动连接并找到注册表项并将其导入到脚本开头来解决了这个问题。在 Linux 中,应该是相同的总体思路:您希望将此服务器添加到受信任主机列表中,以便 ssh 不会每次都询问您是否信任他。

手动连接后,找到密钥文件并将其添加到您的known_hosts 文件中。这样 ssh 将查看该文件,假设您知道自己在做什么并继续操作,而不会询问您指纹。

相关内容