Pregunta Clon git no interactivo (ssh fingerprint prompt) [duplicado]


Esta pregunta ya tiene una respuesta aquí:

Quiero clonar un repositorio de forma no interactiva. Al clonar, git solicita confirmar la huella digital del host:

The authenticity of host 'bitbucket.org (207.223.240.182)' 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)? no

¿Cómo fuerzo el "sí" cada vez que aparece esta pregunta? Traté de usar yes yes | git clone ..., pero no funciona.

EDITAR: Aquí hay una solución: ¿Puedo agregar automáticamente un nuevo host a known_hosts? (Agrega entradas a known_hosts con ssh-keyscan).


109
2017-11-09 09:04


origen


Es interesante ver que incluso después de dos años esta pregunta no tiene una respuesta adecuada. Hay algunos otros casos en los que git solicitará, por ejemplo, si intenta clonar a través de http y el servidor solicita basic_auth. ¿Cómo hacer esto en modo no interactivo? - sorin
Añadiendo el -q La opción (tranquila) lo hizo por mí. Ahora estoy atascado automatizando la frase de contraseña.


Respuestas:


No creo que sea la mejor solución, pero fue una solución para mí.

RESPONDER:

Añadiendo los nombres de dominio a la known_hosts archivo usando el ssh-keyscan El comando resolvió el problema:

ssh-keyscan <enter_domainname_e.g._github.com> >> ~/.ssh/known_hosts


92
2017-11-02 04:13



Por favor no hagas esto. Esto NO es totalmente seguro: las huellas dactilares no están aquí para molestarlo, sino para asegurarse de que no están enfrentando un ataque de hombre en el medio. Por favor, vea mi respuesta a continuación. - autra
como dije, "no creo que esa sea la mejor solución, pero fue una solución para mí". Debido a que tenía prisa, seguramente hay una "manera correcta de cumplir las políticas" de hacerlo ((: - kroe
No es una cuestión de política correcta :-) Es una cuestión de si es seguro o no. Su solución es segura si y solo si comprueba manualmente la huella dactilar después de su ssh-keyscan y antes de agregarlo a .ssh/known_hosts para ser el mismo que el github ha publicado en su sitio web. Puedes hacerlo de varias maneras, y la mía es una de ellas. También puede realizar una comprobación igual en su secuencia de comandos, pero al final todo se reduce a esto: necesita su secuencia de comandos para saber qué huella digital espera, y necesita que falle si no recibe la correcta. - autra
agregar la clave SOLAMENTE si no existe ssh-keygen -F github.com || ssh-keyscan github.com >>~/.ssh/known_hosts - transang
Hacer esto una vez como parte de una gestión de configuración o ejecución de aprovisionamiento debería estar bien. Si la huella dactilar cambia en el futuro, ssh funcionará según lo previsto y le avisará que el certificado ha cambiado, devolviendo un código de salida distinto a 0. Es probable que esto detenga cualquier script en el que estés usando ssh o git. - emhohensee


Ninguna de las respuestas es segura. Tienes 2 opciones:

Usa el protocolo https en lugar de git

No le pedirá una huella digital, porque ssh no está involucrado, se usa https (duh) en su lugar. Si está utilizando una imagen minimalista o Docker, es posible que deba instalar el paquete de certificados de ca.

Si realmente quieres el protocolo git + ssh

¿Realmente necesitas agregar la clave en tiempo de ejecución? Esto no es totalmente seguro.

Antes de ejecutar su script, obtenga la clave de github (en su máquina local):

ssh-keyscan github.com >> githubKey

Generar la huella dactilar:

ssh-keygen -lf githubKey

Y revisalo a mano en contra de los enumerados en esta pagina (ok, confía en que los certificados https y OpenSSL le ofrezcan el sitio web original de github, pero es mucho mejor que aceptar una clave pública a ciegas).

Luego, lo guardas en tu script agregándolo:

echo '<copy paste the content of 'cat githubKey' on your machine>'  >> ~/.ssh/known_hosts

antes de la clonación git.

La clave pública de GitHub solo cambiará si creen que fue comprometida (o no lo suficientemente segura). Si este es el caso, tu querer Su script para fallar de todos modos.


79
2018-06-25 15:39



Esta Es la única respuesta correcta y segura a la pregunta. ¿Por qué es la última? Me avergüenzo de la humanidad ;-( - Jan Warchoł
No puedes hacer HTTPS no interactivo con GitHub si usas autenticación de dos factores, desafortunadamente. - Brett Widmeier
No veo por qué no. Estamos hablando de un repositorio público aquí, sin necesidad de autenticación. La clonación de un repo privado desde un script es otra cosa completamente: necesita autorizar su script para hacerlo. - autra
Verificar la huella digital "manualmente" es menos doloroso de lo que parece, con la ayuda de la "barra de búsqueda" en los exploradores modernos (como en Cromo). - Franklin Yu


Creo que una mejor opción aquí es hacer una copia de seguridad y vaciar su ~/.ssh/known_hosts archivo, realice manualmente la conexión SSH, verificando la dirección IP y la huella digital, mv ~/.ssh/known_hosts ~/bitbucket_hosts, luego usar los contenidos de ~/bitbucket_hostsen su script para agregar automáticamente las huellas dactilares conocidas al archivo conocido_hosts (no olvide restaurar el original) ~/.ssh/known_hosts).

Este paso solo debe realizarse una vez (en cualquier máquina, creo), y una vez que tenga las huellas digitales, puede incorporarlo a su script de automatización.


7
2018-04-07 18:53





Si bien entiendo que desea automatizar un proceso de este tipo, no sería aconsejable hacerlo. La razón por la cual SSH y los subcomponentes de redes relacionados se resisten cuando se usa un protocolo seguro es para ENCARGAR a un ser humano que se desconoce la clave pública de un sistema. Esto es intencional: el usuario debe informar explícitamente al sistema que se espera del host. No querría aceptar automáticamente cada clave pública que se le presente o parte de la seguridad en SSH o TLS / SSL podría verse comprometida. Un ejemplo es a través de un ataque de hombre en el medio, como cuando un software de proxy presenta su propia clave en lugar del host que espera.

Proceda con precaución.

Si no tiene miedo de la fuente del código a través del cable, debe utilizar el protocolo git: // de forma explícita y exclusiva al realizar la clonación: no tiene autenticación y está en texto sin cifrar.


6
2018-01-22 22:34



Definitivamente puedo ver casos de uso en los que necesitamos imponer usos no interactivos de git clone... y eso no significa que debamos aceptar ningún cheque (la huella digital en particular). En mi caso, estaría perfectamente feliz de fallar automáticamente en tal cosa. - vaab


Como dijo Jeff Hall, hacerlo es peligroso, ya que permite ataques de hombre en el medio no detectados. Sin embargo, podrías usar el StrictHostKeyChecking no Opción en ssh para desactivar la verificación de las claves del host. Sin embargo, sería muy cuidadoso con esa opción si fuera usted.


5
2018-02-03 07:45



También permite el hombre en el medio ¿verdad? - autra


Añadiendo la clave a .ssh/known_hosts Parece ser lo correcto a hacer.

Aunque cuando automatiza la tarea, desea asegurarse de que la clave no esté contenida y agregada en cada una de ellas. clone/pull Tareas.

Este fragmento solo agregará la huella digital si no se encuentra:

if [ ! -n "$(grep "^bitbucket.org " ~/.ssh/known_hosts)" ]; then ssh-keyscan bitbucket.org >> ~/.ssh/known_hosts 2>/dev/null; fi

4
2018-02-16 10:42



Esto fue perfecto. Se puede colocar fácilmente en un script de implementación y es más seguro que deshabilitar la verificación del host. Aquí hay una sola línea para github: if [ ! -n "$(grep "^github.com " ~/.ssh/known_hosts)" ]; then ssh-keyscan github.com >> ~/.ssh/known_hosts 2>/dev/null; fi; ssh-agent bash -c "ssh-add /path/to/your/deploy/id_rsa; git clone -b master git@github.com:githubAccount/githubRepo.git /your/target/dir - tweak2
Esto no funciona cuando HashKnownHosts está habilitado en / etc / ssh / ssh_config (o ~ / .ssh / config). En lugar de [ ! -n "$(grep "^bitbucket.org " ~/.ssh/known_hosts)" ] sería mejor usar [ ! "$(ssh-keygen -F bitbucket.org)" ], que encuentra líneas con y sin hash en arenas conocidas. - Claus Conrad