Git dice "Advertencia: permanentemente agregado a la lista de hosts conocidos"
github shell (10)
Cada vez que uso git para interactuar con un control remoto, como al tirar o empujar, me aparece el siguiente mensaje:
Advertencia: Se agregó permanentemente ''...'' (RSA) a la lista de hosts conocidos.
¿Cómo puedo evitar que se muestre este mensaje molesto? Es solo una molestia: todo funciona correctamente.
Agregue la siguiente línea a su archivo de configuración ssh ($ HOME / .ssh / config):
LogLevel=quiet
Si ejecuta ssh desde la línea de comandos, agregue la siguiente opción a la cadena de comandos:
-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
Ese mensaje 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 clave de host, que puede indicar un ataque MITM en su sesión SSH.
Establezca LogLevel
en ERROR
(no QUIET
) en el archivo ~/.ssh/config
para evitar ver estos errores:
Host *
StrictHostKeyChecking no
UserKnownHostsFile /dev/null
LogLevel ERROR
Este problema me estaba molestando por bastante tiempo. El problema es que el cliente OpenSSH que compilaron para Windows no verifica el archivo known_hosts en ~/.ssh/known_hosts
ssh -vvvvvvvvvvvvvvvvvvv [email protected]
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 archivo ~/.ssh/config
e insertar la línea:
UserKnownHostsFile ~/.ssh/known_hosts
Luego verá el mensaje la próxima vez que ingrese a Github, pero luego ya no lo verá más ya que el host se agrega al archivo known_hosts
. Esto realmente soluciona el problema, en lugar de simplemente ocultar el mensaje de registro.
Esto significa principalmente que hay cambios para la clave para ese host ~/.ssh/known_hosts
, y no lo ACTUALIZARÁ automáticamente. Por lo tanto, cada vez que recibe este mensaje de advertencia.
Esto sucede a menudo para la conexión a las máquinas virtuales recreadas, que cambia la clave con la misma dirección IP
Solución
Si solo tiene una entrada, puede eliminar el archivo ~/.ssh/known_hosts
y, después de la primera conexión, la clave estará allí y no aparecerá ningún mensaje de advertencia después de eso.
Si tiene varias entradas, puede usar el comando a continuación para eliminar
$ ssh-keygen -R <hostname>
Funciona bien para mí
Me metí en el mismo problema cuando comencé a usar una máquina con Windows. En mi caso fue porque mi configuración de SSH no estaba completa. Github tiene una documentación muy precisa sobre la configuración de SSH. Una vez que se haya cuidado, el problema se resolvió.
https://help.github.com/articles/checking-for-existing-ssh-keys/ https://help.github.com/articles/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent/
No hay una solución limpia para el problema que usted anotó, hasta donde yo sé.
La redirección / dev / null sugerida anteriormente aún mostrará la advertencia, solo desactiva la función de seguridad de almacenar las claves remotas redireccionando 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 mensaje 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 declaración "caso" para el comando 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 binario = / completo / ruta es la ruta al binario 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 seguridad en la configuración global de ssh que afectará todas sus sesiones ssh y no solo aquellos que quiere suprimir el mensaje.
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 mensaje de advertencia que no desee ver y puede usar un único script para ajustar todos los binarios que desee (mediante el uso de enlaces del sistema de archivos).
Para suprimir mensajes de advertencia para ssh
, puede agregar las siguientes líneas a ~/.ssh/config
:
Host *
LogLevel error
Eso desactivará las advertencias pero no los mensajes de error. Al igual que las otras configuraciones en ~/.ssh/config
, puede configurar LogLevel
por host si desea un control más preciso.
Si está utilizando un repositorio de GitHub, considere usar la versión HTTPS de la URL en su lugar, para eludir por completo este problema:
Si clonas tu repositorio desde la aplicación Windows GitHub, esto es lo que usa para la URL remota. Tal vez ellos saben algo que nosotros no sabemos.
Tengo la misma pregunta, y encontré que no hay un archivo .ssh
en mi ~
. Así que solo creo el directorio .ssh
bajo ~
ruta, y el problema se resuelve.