Entonces, estaba buscando una forma mundana para evitar la interacción manual del host desconocido de clonar un repositorio git como se muestra a continuación:
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)?
Tenga en cuenta la huella digital de la clave RSA ...
Entonces, esto es algo de SSH, esto funcionará para git sobre SSH y solo cosas relacionadas con SSH en general ...
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
Primero, instale nmap en su controlador diario. nmap es muy útil para ciertas cosas, como detectar puertos abiertos y esto: verificar manualmente las huellas dactilares SSH. Pero, volviendo a lo que estamos haciendo.
Bueno. Estoy comprometido en los múltiples lugares y máquinas que lo he comprobado, o la explicación más plausible de que todo es Hunky Dory es lo que está sucediendo.
Esa 'huella digital' es solo una cadena acortada con un algoritmo unidireccional para nuestra conveniencia humana, a riesgo de que más de una cadena se resuelva en la misma huella digital. Sucede, se llaman colisiones.
En cualquier caso, volvamos a la cadena original que podemos ver en contexto a continuación.
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
Entonces, con anticipación, tenemos una forma de solicitar una forma de identificación del host original.
En este punto, manualmente somos tan vulnerables como automáticamente: las cadenas coinciden, tenemos los datos base que crean la huella digital y podríamos pedir esos datos base (para evitar colisiones) en el futuro.
Ahora, para usar esa cadena de una manera que evite preguntar sobre la autenticidad de un host ...
El archivo conocido_hosts en este caso no utiliza entradas de texto sin formato. Sabrás las entradas hash cuando las veas, se ven como hashes con caracteres aleatorios en lugar de xyz.com o 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==
La primera línea de comentarios aparece exasperantemente, pero puede deshacerse de ella con una simple redirección a través de la convención ">" o ">>".
Como he hecho todo lo posible para obtener datos no contaminados que se utilizarán para identificar un "host" y confianza, agregaré esta identificación a mi archivo conocido_hosts en mi directorio ~ / .ssh. Como ahora se identificará como un host conocido, no recibiré el mensaje mencionado anteriormente cuando eras joven.
Gracias por quedarte conmigo, aquí tienes. Estoy agregando la clave RSA de bitbucket para que pueda interactuar con mis repositorios git allí de forma no interactiva como parte de un flujo de trabajo de CI, pero haga lo que haga lo que quiera.
#!/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
Entonces, así es como te mantienes virgen por hoy. Puede hacer lo mismo con github siguiendo instrucciones similares en su propio tiempo.
Vi tantas publicaciones de desbordamiento de pila que le dicen que agregue la clave mediante programación a ciegas sin ningún tipo de comprobación. Cuanto más verifique la clave de diferentes máquinas en diferentes redes, más confianza tendrá en que el host es el que dice que es, y eso es lo mejor que puede esperar de esta capa de seguridad.
INCORRECTO
ssh -oStrictHostKeyChecking = sin nombre de host [comando]
INCORRECTO
ssh-keyscan -t rsa -H nombre de host >> ~ / .ssh / known_hosts
No hagas ninguna de las cosas anteriores, por favor. Tienes la oportunidad de aumentar tus posibilidades de evitar que alguien escuche tus transferencias de datos a través de un hombre en el medio del ataque. Aprovecha esa oportunidad. La diferencia es verificar literalmente que la clave RSA que tiene es la del servidor de buena fe y ahora sabe cómo obtener esa información para compararla y poder confiar en la conexión. Solo recuerde que más comparaciones de diferentes computadoras y redes generalmente aumentarán su capacidad de confiar en la conexión.