在bash脚本中回答是


24

我正在尝试git clone通过bash脚本进行处理,但是第一次运行该脚本并且不知道服务器,但该脚本失败了。我有这样的事情:

yes | git clone git@github.com: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将密钥添加到已知主机吗?


echo yes | git clone git@github.com:repo/repoo.git
asfallows

3
@ asfallows,@ Rafael:echo yes这不是一个好方法:第二次运行命令时,ssh不会询问您是否要继续,因为服务器密钥已经知道。
吉尔(Gilles)'所以

Answers:


21

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

Host github.com
    StrictHostKeyChecking no

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

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


2
强烈希望检索和验证指纹,然后将其存储在known_hosts文件中
吉尔(Gilles)'所以

1
非常感谢您的回答,我最终采用了在known_hosts中添加指纹的方法。就像更安全了:)
拉斐尔

哦,我正在用p来做。如果有人对使用它感兴趣,可以使用以下方法:gist.github.com/1155725
Rafael

5

yes输出y。RSA密钥接受需求yes。你可以尝试yes yes | git clone git@github.com:repo/repoo.git这样yes输出yes代替y


5
出于某种原因,对我而言,这不适用于git clone。
Matt V.

都不适合我。也echo "yes" | ...没有。我认为git不接受管道。也许只有某些版本?
udondan

3

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

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


1

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

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.