25

你如何绕过这个问题或添加一个自动回答这个问题的标志?

因为我正在尝试编写一个脚本,而这个问题一直在停止 rsync 的过程,因为在出​​现提示时无法在脚本中回答这个问题。

4

2 回答 2

44

StrictHostKeyChecking选项设置为no,在配置文件中或通过-o.

使用eoption ofrsync将选项传递给ssh

-e "ssh -o StrictHostKeyChecking=no"
于 2012-08-06T13:18:10.163 回答
2

所以,我发现了很多不安全的答案——但更好的方法不是更多的工作,所以我一直在寻找建议以不太安全的方式来做与 SSH 相关的事情的帖子,比如 rsync。我一直在寻找一种普通的方法来绕过克隆 git repo 的未知主机手动交互,如下所示,但它适用于提到的 rsync 和其他技术:

brad@computer:~$ git clone git@bitbucket.org:viperks/viperks-api.git
Cloning into 'viperks-api'...
The authenticity of host 'bitbucket.org (104.192.143.3)' can't be established.
RSA key fingerprint is 97:8c:1b:f2:6f:14:6b:5c:3b:ec:aa:46:46:74:7c:40.
Are you sure you want to continue connecting (yes/no)?

注意 RSA 密钥指纹...

所以,这是一个 SSH 的东西,这将适用于 git over SSH 和一般的 SSH 相关的东西......

brad@computer:~$ nmap bitbucket.org --script ssh-hostkey

Starting Nmap 7.01 ( https://nmap.org ) at 2016-10-05 10:21 EDT
Nmap scan report for bitbucket.org (104.192.143.3)
Host is up (0.032s latency).
Other addresses for bitbucket.org (not scanned): 104.192.143.2 104.192.143.1 2401:1d80:1010::150
Not shown: 997 filtered ports
PORT    STATE SERVICE
22/tcp  open  ssh
| ssh-hostkey:
|   1024 35:ee:d7:b8:ef:d7:79:e2:c6:43:9e:ab:40:6f:50:74 (DSA)
|_  2048 97:8c:1b:f2:6f:14:6b:5c:3b:ec:aa:46:46:74:7c:40 (RSA)
80/tcp  open  http
443/tcp open  https

Nmap done: 1 IP address (1 host up) scanned in 42.42 seconds

首先,在您的日常驱动程序上安装 nmap。nmap 对某些事情非常有帮助,例如检测开放端口以及手动验证 SSH 指纹。但是,回到我们正在做的事情。

好的。我要么在我检查过的多个地方和机器上受到了损害——要么对正在发生的一切都是 hunky dory 的更合理的解释。

这个“指纹”只是一个用单向算法缩短的字符串,为了我们的人类方便,冒着不止一个字符串解析成同一个指纹的风险。它发生了,它们被称为碰撞。

无论如何,回到我们可以在下面的上下文中看到的原始字符串。

brad@computer:~$ ssh-keyscan bitbucket.org
# bitbucket.org SSH-2.0-conker_1.0.257-ce87fba app-128
no hostkey alg
# bitbucket.org SSH-2.0-conker_1.0.257-ce87fba app-129
bitbucket.org ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAubiN81eDcafrgMeLzaFPsw2kNvEcqTKl/VqLat/MaB33pZy0y3rJZtnqwR2qOOvbwKZYKiEO1O6VqNEBxKvJJelCq0dTXWT5pbO2gDXC6h6QDXCaHo6pOHGPUy+YBaGQRGuSusMEASYiWunYN0vCAI8QaXnWMXNMdFP3jHAJH0eDsoiGnLPBlBp4TNm6rYI74nMzgz3B9IikW4WVK+dc8KZJZWYjAuORU3jc1c/NPskD2ASinf8v3xnfXeukU0sJ5N6m5E8VLjObPEO+mN2t/FZTMZLiFqPWc/ALSqnMnnhwrNi2rbfg/rd/IpL8Le3pSBne8+seeFVBoGqzHM9yXw==
# bitbucket.org SSH-2.0-conker_1.0.257-ce87fba app-123
no hostkey alg

因此,我们可以提前向原始主机索取某种形式的身份证明。

在这一点上,我们手动和自动一样容易受到攻击——字符串匹配,我们拥有创建指纹的基础数据,并且我们可以在未来请求该基础数据(防止冲突)。

现在以防止询问主机真实性的方式使用该字符串...

本例中的 known_hosts 文件不使用纯文本条目。当您看到哈希条目时,您就会知道它们,它们看起来像带有随机字符的哈希,而不是 xyz.com 或 123.45.67.89。

brad@computer:~$ ssh-keyscan -t rsa -H bitbucket.org
# bitbucket.org SSH-2.0-conker_1.0.257-ce87fba app-128
|1|yr6p7i8doyLhDtrrnWDk7m9QVXk=|LuKNg9gypeDhfRo/AvLTAlxnyQw= ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAubiN81eDcafrgMeLzaFPsw2kNvEcqTKl/VqLat/MaB33pZy0y3rJZtnqwR2qOOvbwKZYKiEO1O6VqNEBxKvJJelCq0dTXWT5pbO2gDXC6h6QDXCaHo6pOHGPUy+YBaGQRGuSusMEASYiWunYN0vCAI8QaXnWMXNMdFP3jHAJH0eDsoiGnLPBlBp4TNm6rYI74nMzgz3B9IikW4WVK+dc8KZJZWYjAuORU3jc1c/NPskD2ASinf8v3xnfXeukU0sJ5N6m5E8VLjObPEO+mN2t/FZTMZLiFqPWc/ALSqnMnnhwrNi2rbfg/rd/IpL8Le3pSBne8+seeFVBoGqzHM9yXw==

第一个注释行令人愤怒地出现了——但你可以通过“>”或“>>”约定通过简单的重定向来摆脱它。

由于我已尽力获取用于识别“主机”和信任的未污染数据,因此我将将此标识添加到 ~/.ssh 目录中的 known_hosts 文件中。由于它现在将被识别为已知主机,因此我不会在您小时候收到上述提示。

谢谢你一直陪着我,给你。我正在添加 bitbucket RSA 密钥,以便我可以作为 CI 工作流程的一部分以非交互方式与我的 git 存储库进行交互,但无论你做什么都可以。

#!/bin/bash
cp ~/.ssh/known_hosts ~/.ssh/known_hosts.old && echo "|1|yr6p7i8doyLhDtrrnWDk7m9QVXk=|LuKNg9gypeDhfRo/AvLTAlxnyQw= ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAubiN81eDcafrgMeLzaFPsw2kNvEcqTKl/VqLat/MaB33pZy0y3rJZtnqwR2qOOvbwKZYKiEO1O6VqNEBxKvJJelCq0dTXWT5pbO2gDXC6h6QDXCaHo6pOHGPUy+YBaGQRGuSusMEASYiWunYN0vCAI8QaXnWMXNMdFP3jHAJH0eDsoiGnLPBlBp4TNm6rYI74nMzgz3B9IikW4WVK+dc8KZJZWYjAuORU3jc1c/NPskD2ASinf8v3xnfXeukU0sJ5N6m5E8VLjObPEO+mN2t/FZTMZLiFqPWc/ALSqnMnnhwrNi2rbfg/rd/IpL8Le3pSBne8+seeFVBoGqzHM9yXw==" >> ~/.ssh/known_hosts

所以,这就是你今天保持处女的方式。您可以在自己的时间按照类似的指示对 github 执行相同的操作。

我看到很多堆栈溢出帖子告诉您以编程方式盲目添加密钥而无需任何检查。您检查来自不同网络上不同机器的密钥的次数越多,您就越能相信主机就是它所说的那个主机——这是您从这一安全层所能期望的最好的。

错误的 ssh -oStrictHostKeyChecking=没有主机名 [命令]

错误的 ssh-keyscan -t rsa -H 主机名 >> ~/.ssh/known_hosts

请不要做以上任何事情。您有机会增加避免有人通过中间人攻击窃听您的数据传输的机会——抓住这个机会。不同之处在于从字面上验证您拥有的 RSA 密钥是真正的服务器之一,现在您知道如何获取该信息来比较它们,以便您可以信任连接。请记住,来自不同计算机和网络的更多比较通常会增加您信任连接的能力。

于 2016-10-10T13:11:03.323 回答