Então, eu estava procurando uma maneira mundana de ignorar a interação manual host desconhecida de clonar um repositório git, como mostrado abaixo:
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)?
Observe a impressão digital da chave RSA ...
Então, isso é uma coisa do SSH, isso funcionará para git sobre SSH e apenas coisas relacionadas ao SSH em geral ...
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
Primeiro, instale o nmap no seu driver diário. O nmap é altamente útil para certas coisas, como detectar portas abertas e isso - verificar manualmente as impressões digitais SSH. Mas, voltando ao que estamos fazendo.
Boa. Ou estou comprometida nos vários lugares e máquinas em que verifiquei - ou a explicação mais plausível de tudo o que está acontecendo é o que está acontecendo.
Essa 'impressão digital' é apenas uma string reduzida com um algoritmo unidirecional para nossa conveniência humana, com o risco de mais de uma string ser resolvida na mesma impressão digital. Acontece, eles são chamados de colisões.
Independentemente disso, de volta à string original que podemos ver no contexto abaixo.
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
Portanto, com antecedência, temos uma maneira de solicitar uma forma de identificação ao host original.
Nesse ponto, estamos manualmente tão vulneráveis quanto automaticamente - as cadeias correspondem, temos os dados de base que criam a impressão digital e poderíamos solicitar esses dados de base (evitando colisões) no futuro.
Agora, para usar essa string de uma maneira que evite perguntar sobre a autenticidade dos hosts ...
O arquivo known_hosts nesse caso não usa entradas de texto sem formatação. Você saberá entradas de hash quando as vir; elas se parecem com hashes com caracteres aleatórios em vez de xyz.com ou 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==
A primeira linha de comentário aparece irritantemente - mas você pode se livrar dela com um redirecionamento simples através da convenção ">" ou ">>".
Como eu fiz o meu melhor para obter dados não contaminados para serem usados para identificar um "host" e confiança, adicionarei essa identificação ao meu arquivo known_hosts no meu diretório ~ / .ssh. Como agora será identificado como um host conhecido, não receberei o prompt mencionado acima quando você era jovem.
Obrigado por ficar comigo, aqui está. Estou adicionando a chave RSA do bitbucket para que eu possa interagir com meus repositórios git de uma maneira não interativa como parte de um fluxo de trabalho de IC, mas faça o que quiser.
#!/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
Então é assim que você permanece virgem por hoje. Você pode fazer o mesmo com o github seguindo instruções semelhantes no seu próprio tempo.
Vi tantas mensagens de estouro de pilha dizendo para adicionar programaticamente a chave às cegas sem nenhum tipo de verificação. Quanto mais você checa a chave de máquinas diferentes em redes diferentes, mais confiança você tem que o host é o que diz ser - e isso é o melhor que você pode esperar dessa camada de segurança.
ERRADO
ssh -oStrictHostKeyChecking = nenhum nome de host [comando]
ERRADO
ssh-keyscan -t rsa -H nome do host >> ~ / .ssh / known_hosts
Não faça nenhuma das coisas acima, por favor. Você tem a oportunidade de aumentar suas chances de evitar alguém espionando suas transferências de dados através de um homem no meio do ataque - aproveite essa oportunidade. A diferença é literalmente verificar se a chave RSA que você possui é a do servidor de boa-fé e agora você sabe como obter essas informações para compará-las, para que possa confiar na conexão. Lembre-se de que mais comparações de diferentes computadores e redes geralmente aumentam sua capacidade de confiar na conexão.