Compartir claves SSH privadas con Bash en Windows

14

Tengo Windows 10 con Git instalado. Este Git usa mi directorio C:/Users/MyName como el directorio de INICIO y el directorio /.ssh/ , apropiadamente para obtener mis claves SSH privadas.

Acabo de habilitar y configurar "Bash en Ubuntu en Windows" (¡qué pena!) y también instalé Git en él. Me gustaría que ambos Gits usen el mismo conjunto de claves, de modo que no importa en qué entorno trabaje en esta máquina, mis compromisos siempre provendrán de mí.

El problema es que el directorio HOME en bash es diferente ( /home/MyName ) y, por lo tanto, no ve las claves ubicadas en el ahora distante ../../mnt/c/Users/MyName/.ssh . Pensé que estaría en un ganador al cambiar la variable de entorno HOME usando

export HOME=/c/mnt/Users/MyName

Esto cambió el directorio de INICIO con éxito, pero el bash git aún no ve las claves contenidas en el directorio ./.ssh .

No estoy seguro de si esto es A) porque bash git espera claves en un formato de archivo diferente. (los actuales son id_rsa y id_rsa.pub ) B) ¿bash git está ignorando la variable HOME modificada? O tal vez ambos.

Tampoco estoy seguro de que C) si cambiar arbitrariamente la variable HOME como esta es una buena idea en general, ¿qué otros programas podrían hacer referencia a ella?

    
pregunta Toby 09.08.2016 - 16:38

2 respuestas

14

Entonces, como Telastyn comentó, agregué enlaces simbólicos en WSLs ~/.ssh/ a id_rsa y id_rsa.pub usando:

> ln -s /mnt/c/Users/MyName/.ssh/id_rsa ~/.ssh/id_rsa
> ln -s /mnt/c/Users/MyName/.ssh/id_rsa.pub ~/.ssh/id_rsa.pub

Usando la misma técnica para vincular el directorio de enlaces simbólicos sugerido por tripleee, tuve problemas hasta que vi que las barras diagonales de seguimiento que usé en el comando ln (a la izquierda de usar la tecla de tabulación para que bash complete el directorio nombre) fueron un problema. Por lo tanto, en lugar de hacer lo anterior, uno podría hacer mejor:

> ln -s /mnt/c/Users/Myname/.ssh ~/.ssh

El archivo known_hosts difiere ligeramente entre mi uso (git en powershell usando ssh-agent) en Windows y el uso de SSH en WSL, por lo que el nombre de host y la dirección IP no se incluyen en la versión de Windows. De acuerdo con la página de manual de ssh-config, hay un indicador disponible para deshabilitar este hash que entendí que SSH entendería el archivo sin el hashing que se ha desarrollado hasta ahora.

Este último método significa que los detalles utilizados para SSH utilizados entre los dos entornos diferentes son exactamente los mismos.

¡Gracias a Matěj Kříž por señalar un pequeño pero vital personaje perdido!

    
respondido por el Toby 11.11.2016 - 12:27
6

Basado en la nueva compilación "Insider Build 17063" los permisos para archivos ahora funcionan de manera diferente. En resumen tienes que hacer:

sudo umount /mnt/c
sudo mount -t drvfs C: /mnt/c -o metadata

Esto hará que los permisos para su carpeta ssh funcionen como usted necesita. Luego proceda como OP sugiere en su respuesta.

Enlaces relevantes:

enlace enlace

EDIT

Volví a esta pregunta porque descubrí que esto es solo una solución temporal (sí, soy estúpido). Cada vez que reinicie (cierre sesión) su WSL, deberá volver a emitir estos comandos.

Así que la solución que me funciona ahora es editar (crear) el archivo de configuración /etc/wsl.conf en mi wsl ubuntu, y colocarlo en el siguiente, luego reiniciar para hacer montajes nuevamente:

# Enable extra metadata options by default, set uid and gid to 0
[automount]
options = "metadata,uid=,gid="

Por qué agrego metadatos:

  

Los permisos de Linux se agregan como metadatos adicionales al archivo. Esta   significa que un archivo puede tener permiso de lectura / escritura / ejecución de Linux y Windows   bits.

Por qué configurar uid y gid:

  

De forma predeterminada, WSL establece el uid y gid al valor del usuario predeterminado   (En la distribución de Ubuntu, el usuario predeterminado se crea con   uid = 1000, gid = 1000). Si el usuario especifica una opción gid o uid   explícitamente a través de esta clave, se sobrescribirá el valor asociado.   De lo contrario, el valor predeterminado siempre se agregará.

Enlaces relevantes:

enlace enlace enlace

    
respondido por el Entity Black 14.05.2018 - 12:39

Lea otras preguntas en las etiquetas