Responda sí en un script bash

24

Estoy tratando de hacer una git clonesecuencia de comandos bash, pero la primera vez que ejecuto la secuencia de comandos y el servidor aún no se conoce, la secuencia de comandos falla. Tengo algo como esto:

yes | git clone git@github.com:repo/repoo.git
The authenticity of host 'github.com (207.97.227.239)' can't be established.
RSA key fingerprint is 16:27:ac:a5:76:28:2d:36:63:1b:56:4d:eb:df:a6:48.
Are you sure you want to continue connecting (yes/no)? 

Pero está ignorando el yes. ¿Sabes cómo forzar git clonea agregar la clave a los hosts conocidos?

Rafael
fuente
¿Qué hay de echo yes | git clone [email protected]:repo/repoo.git?
asfallows
3
@asfallows, @Rafael: echo yesno es un buen enfoque: la segunda vez que ejecuta el comando, ssh no le preguntará si desea continuar porque ya se conocerá la clave del servidor.
Gilles 'SO- deja de ser malvado'

Respuestas:

21

Agregue lo siguiente a su ~/.ssh/configarchivo:

Host github.com
    StrictHostKeyChecking no

Cualquier cosa que use el cliente open-ssh para establecer un shell remoto (con el cliente git lo hace) debe omitir las comprobaciones de teclas en github.com.

En realidad, esta es una mala idea, ya que cualquier forma de omitir los cheques (ya sea que presione automáticamente sí o omita el cheque en primer lugar) crea espacio para un hombre en el compromiso de seguridad medio. Una mejor manera sería recuperar y validar la huella digital y almacenarla en el known_hostsarchivo antes de tener que ejecutar algún script que se conecte automáticamente.

Caleb
fuente
2
Con una fuerte preferencia para recuperar y validar la huella digital y almacenarla en el known_hostsarchivo anterior .
Gilles 'SO- deja de ser malvado'
1
Muchas gracias por su respuesta, terminé siguiendo el enfoque de agregar la huella digital en los conocidos_hosts. Es como más seguro :)
Rafael
Oh, estoy usando una marioneta para hacer esto. Si alguien está interesado en usarlo aquí está la receta: gist.github.com/1155725
Rafael
5

yessalidas y. Necesidades de aceptación clave de RSA yes. Podrías probar yes yes | git clone [email protected]:repo/repoo.gitcon yessalidas en yeslugar de y.

jfg956
fuente
55
Por alguna razón, eso no funcionó con git clone, para mí.
Matt V.
Tampoco funcionó para mí. Tampoco lo echo "yes" | ...hace. Creo gitque no acepta tuberías. ¿Quizás solo en alguna versión?
udondan
3

La ejecución ssh-keyscan -H github.com >> ~/.ssh/known_hostsantes de la clonación agregará la clave y evitará que aparezca la solicitud.

Por supuesto, este enfoque también es vulnerable a un ataque MITM.

Kevin Smyth
fuente
1

Me he encontrado con este problema antes. Aunque estaba en una máquina Windows pero necesitábamos usar ssh para conectarnos a un host remoto. Nos encontramos con el mismo problema que la primera conexión siempre fallaba porque no reconocería las claves.

Lo resolví conectándome manualmente y encontrando la clave de registro e importándola al comienzo del script. En Linux, debe ser la misma idea general: desea agregar este servidor a una lista de hosts confiables para que ssh no le pregunte si confía en él cada vez.

Una vez que se conecte manualmente, busque el archivo de clave y agréguelo a su archivo conocido_hosts. De esta manera, ssh revisará ese archivo, asumirá que sabe lo que está haciendo y procederá sin preguntarle sobre la huella digital.

n0pe
fuente