gitosis公钥

在我的客户端,我试图运行:

git clone gitosis@DevServer:gitosis-admin.git 

我得到一个警告:

主机'10.1.1.13(10.1.1.13)'的真实性无法build立。 RSA密钥指纹是a2:c3:fd:d7:f7:75:df:dd:49:64:ce:64:cc:98:e6:2c。 你确定要继续连接(是/否)吗?

它似乎是从以下公钥中挑选出来的:

 /etc/ssh/ssh_host_rsa_key.pub 

我想要它使用位于:

 /srv/gitosis/.ssh/authorized_keys 

如何让我的服务器分发正确的公钥?

我想你可能会误解来自ssh的消息。 下列…

 The authenticity of host '10.1.1.13 (10.1.1.13)' can't be established. RSA key fingerprint is a2:c3:fd:d7:f7:75:df:dd:49:64:ce:64:cc:98:e6:2c. Are you sure you want to continue connecting (yes/no)? 

…与您的authorized_keys文件无关。 你得到这个是因为你从来没有连接到给定的主机,所以相应的主机不在你的known_hosts文件中。 当您第一次连接到远程主机时,这是完全正常的行为(因为在最常见的情况下,您将不具备适当主机密钥的先验知识)。

authorized_keys文件只能由远程主机根据它们连接时显示的私钥来确定要接受哪些ssh 客户端连接。

我能够通过以下命令重新初始化pipe理库来解决这个问题:

 sudo -H -u gitosis gitosis-init < /tmp/id_rsa.pub 

这只有在我删除现有的存储库后才起作用:

 sudo rm /srv/gitosis/repositories/gitosis-admin.git -r 

重新初始化存储库而不先删除它不会更新authorized_keys文件。 如果你已经产生了一个新的密钥,你会被卡住使用旧的。

所以,我正在寻找一种世俗的方法来绕过克隆git仓库的未知主机手动交互,如下所示,它也应该为你工作。 您看到的指纹来自远程主机提供的密钥。 您正在收到此问题/警告,因为远程主机在您的known_hosts文件中没有条目。 以下内容将帮助您了解正在发生的事情:

 brad@computer:~$ git clone [email protected]: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的东西,这将适用于通过SSH的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对于某些事情非常有帮助,比如检测开放端口和手动validationSSH指纹。 但是,回到我们正在做的。

好。 我要么在多个地方和我检查过的机器上妥协 – 要么就是发生了什么事情,对于一切正在发生的事情的更合理的解释。

这个“指纹”只是一个string缩短了一个单向algorithm,为了我们的人类方便,可能有多个string分解成相同的指纹。 碰巧,他们被称为碰撞。

无论如何,回到我们可以在下文中看到的原始string。

 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 

所以,提前一点,我们有办法从原来的东道主请求一种身份certificate。

在这一点上,我们手动的就像自动化一样脆弱 – string匹配,我们有创build指纹的基础数据,我们可以在将来要求这些基础数据(防止碰撞)。

现在,以防止询问主机真实性的方式使用该string…

在这种情况下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== 

第一条评论线令人愤慨地显示出来 – 但你可以通过“>”或“>>”惯例的简单redirect来摆脱它。

由于我已经尽了最大的努力来获取未被识别的数据来识别“主机”和信任,我将把这个标识添加到我的〜/ .ssh目录下的known_hosts文件中。 既然现在会被认定为已知的东道主,那么当你还是个年轻人的时候,我就不会得到上述的提示。

感谢你的支持,在这里,你走了。 我添加了bitbucket RSA密钥,这样我就可以作为CI工作stream程的一部分,以非交互方式与我的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做同样的事情。

我看到这么多的堆栈溢出post告诉你以编程方式盲目地添encryption钥没有任何forms的检查。 你从不同networking上的不同机器上检查密钥的次数越多,你就越能相信主机就是它所说的 – 而且这是你从这个安全层所能得到的最好结果。

错误 ssh -oStrictHostKeyChecking = no hostname [command]

错误 ssh-keyscan -t rsa -H hostname >>〜/ .ssh / known_hosts

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