因此,我正在寻找一种平凡的方法来绕过克隆git repo的未知主机手动交互,如下所示:
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指纹。但是,回到我们正在做的事情。
好。我或者在检查过的多个位置和机器上都受到了折衷-或者更合理的解释是一切都发生了。
为方便人类使用,“指纹”只是用一种单向算法缩短的字符串,但有多个字符串分解为同一指纹的风险。碰巧,它们被称为碰撞。
无论如何,回到我们在下面的上下文中可以看到的原始字符串。
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密钥是真正的服务器之一,现在您知道如何获取该信息以进行比较,以便您可以信任连接。请记住,来自不同计算机和网络的更多比较通常会提高您信任连接的能力。