Git dice "Advertencia: permanentemente agregado a la list de hosts conocidos"

Cada vez que uso git para interactuar con un control remoto, como al tirar o empujar, me aparece el siguiente post:

Advertencia: Se agregó permanentemente '…' (RSA) a la list de hosts conocidos.

¿Cómo puedo evitar que se muestre este post molesto? Es solo una molestia: todo funciona correctamente.

Este problema me estaba molestando por bastante time. El problema es que el cliente OpenSSH que comstackron para Windows no verifica el file known_hosts en ~/.ssh/known_hosts

ssh -vvvvvvvvvvvvvvvvvvv git@github.com

 debug3: check_host_in_hostfile: filename /dev/null debug3: check_host_in_hostfile: filename /etc/ssh/ssh_known_hosts debug3: check_host_in_hostfile: filename /dev/null debug3: check_host_in_hostfile: filename /etc/ssh/ssh_known_hosts Warning: Permanently added 'github.com,207.97.227.239' (RSA) to the list of known hosts. 

La respuesta es crear un file ~/.ssh/config e insert la línea:

 UserKnownHostsFile ~/.ssh/known_hosts 

Luego verá el post la próxima vez que ingrese a Github, pero luego ya no lo verá más ya que el host se agrega al file known_hosts . Esto realmente soluciona el problema, en lugar de simplemente ocultar el post de logging.

Agregue la siguiente línea a su file de configuration ssh ($ HOME / .ssh / config):

 LogLevel=quiet 

Si ejecuta ssh desde la command-line, agregue la siguiente opción a la cadena de commands:

 -o LogLevel=quiet 

Por ejemplo, lo siguiente imprime la versión de gcc instalada en machine.example.org (y sin advertencia):

 ssh -o UserKnownHostsFile=/dev/null \ -o StrictHostKeyChecking=no \ -o LogLevel=quiet \ -i identity_file \ machine.example.org \ gcc -dumpversion 

Establezca LogLevel en ERROR (no QUIET ) en el file ~/.ssh/config para evitar ver estos errores:

 Host * StrictHostKeyChecking no UserKnownHostsFile /dev/null LogLevel ERROR 

Ese post es de SSH, que le advierte que se está conectando a un host al que nunca se ha conectado antes. No recomendaría apagarlo, ya que significaría que podría perder una advertencia sobre el cambio de una key de host, que puede indicar un ataque MITM en su session SSH.

Para suprimir posts de advertencia para ssh , puede agregar las siguientes líneas a ~/.ssh/config :

 Host * LogLevel error 

Eso desactivará las advertencias pero no los posts de error. Al igual que las otras configuraciones en ~/.ssh/config , puede configurar LogLevel por host si desea un control más preciso.

Esto significa principalmente que hay cambios para la key para ese host ~/.ssh/known_hosts , y no lo ACTUALIZARÁ automáticamente. Por lo tanto, cada vez que recibe este post de advertencia.

Esto sucede a menudo para la connection a las máquinas virtuales recreadas, que cambia la key con la misma dirección IP

Solución

Si solo tiene una input, puede eliminar el file ~/.ssh/known_hosts y, después de la primera connection, la key estará allí y no aparecerá ningún post de advertencia después de eso.

Si tiene varias inputs, puede usar el command a continuación para eliminar

 $ ssh-keygen -R <hostname> 

Funciona bien para mí

No hay una solución limpia para el problema que usted anotó, hasta donde yo sé.
La networkingirección / dev / null sugerida anteriormente seguirá mostrando la advertencia, simplemente desactiva la característica de security de almacenar las keys remotas al networkingirigir la salida a / dev / null.
Entonces, ssh aún pensaría que escribe algo que en realidad se descarta.

Como sé, la única opción es capturar el post y eliminarlo de stdout.

 ssh/scp..... 2>&1 | grep -v "^Warning: Permanently added" 

Aquí hay un ejemplo completo que puede usar como envoltorio para ocultar tales advertencias:

 #!/bin/bash remove="^Warning: Permanently added" # message to remove from output cmd=${0##*/} case $cmd in ssh) binary=/usr/bin/ssh ;; *) echo "unsupported binary ($0)" exit ;; esac $binary "$@" 2>&1 | grep -v "$remove" 

Para instalarlo, todo lo que necesita hacer es agregar / modificar la statement "caso" para el command real que desea modificar. (ssh, scp, git, etc.)
el "ssh)" significa que el script debe llamarse "ssh" (o un enlace al script se llama ssh). El binary = / completo / ruta es la ruta al binary que el script debe ajustar.
A continuación, coloque el script con el nombre de su elección en / bin o en otro lugar.

El script también es el lugar donde puede usar un -o "UserKnownHostsFile = / dev / null" en la variable $ binary, que es mucho mejor que poner tal riesgo de security en la configuration global de ssh que afectará todas sus sesiones ssh y no solo aquellos que quiere suprimir el post.

Desventajas:
Es un poco elevado, no es una solución perfectamente limpia y mueve stderr a stdout, que podría no ser bueno en todos los casos.
Pero eliminará cualquier tipo de post de advertencia que no desee ver y puede usar un único script para ajustar todos los binarys que desee (mediante el uso de enlaces del sistema de files).

Tengo la misma pregunta, y encontré que no hay un file .ssh en mi ~ . Así que solo creo el directory .ssh bajo ~ ruta, y el problema se resuelve.

Si está utilizando un repository de GitHub, considere usar la versión HTTPS de la URL en su lugar, para eludir por completo este problema:

Haga clic en el botón HTTP y clone esa URL en su lugar

Si clonas tu repository desde la aplicación Windows GitHub, esto es lo que usa para la URL remota. Tal vez ellos saben algo que nosotros no sabemos.