在 Windows 10 和 WSL2 之间共享 Git 和 SSH 配置

pat*_*853 4 git putty windows-10 windows-subsystem-for-linux git-for-windows

我在 Windows 10 上安装了 Putty 和 Git,并且还在 Ubuntu 20.04 LTS 中使用 WSL2。有时我想使用 WSL2 中的 SSH 和 Git,其他时候则想在 Windows 中使用。一切工作正常,除了我必须在 Windows 和 WSL2 主目录中复制.gitconfig,.gitignore和文件。.ssh

我不想在两个地方维护这个配置,所以我想我可以在 WSL2 中对文件进行符号链接:

# In /home/myuser on WSL2
ln -s /mnt/c/Users/myuser/.ssh
ln -s /mnt/c/Users/myuser/.gitconfig
ln -s /mnt/c/Users/myuser/.gitignore
Run Code Online (Sandbox Code Playgroud)

除了一些问题之外,这种方法是有效的。

  1. 中的文件/mnt/c具有0777权限,chmod显然不会对它们执行任何操作。当我ssh在 WSL2 中使用时,它抱怨密钥:Permissions 0777 for '/home/myuser/.ssh/id_rsa' are too open
  2. .gitconfig我中core.excludesfile设置为C:\\\\Users\\myuser\\.gitignore,它在 Windows 中使用 Git 时有效,但在 WSL2 中无效。如果我将其更改为/home/myuser/.gitignore它可以在 WSL2 中运行,但不能在 Windows 上运行。我尝试使用相对路径.gitignore并完全删除该core.excludesfile指令,但都不起作用。

有谁知道解决这些问题的方法吗?我确实想到 Putty 并不关心 SSH 密钥权限,因此我可以将文件移动到 WSL2,然后更新我的 Putty 连接(我有很多连接!)以通过\\wsl$. 但是,这并不能解决core.excludesfile问题,我更愿意在 Windows 中维护配置并通过/mnt/c.


附加背景

我正在将我的开发环境从 Windows 转换为 WSL2,使用 PhpStorm 和 Docker 进行 PHP 开发。我已将 Docker 切换为使用 WSL2 后端而不是 Hyper-V,并将我的项目文件(即 git 存储库)移至 WSL2。然后我使用共享在 PhpStorm 中打开该项目\\wsl$。所有这些都工作得很好,我喜欢它的速度有多快,但是必须复制 git 配置和 ssh 密钥很烦人。

Lar*_*ryH 5

我找到的解决方案是将 Windows ssh 配置文件夹挂载到 WSL 副本上。

在您的/etc/fstabWSL1/2 中,添加相应的条目:

# WSL 1 - mount C: with correct permissions, then bind mount .ssh
C:                              /mnt/c                  drvfs   rw,noatime,uid=1000,gid=1000,case=off,umask=0077,fmask=0077 0 0
/mnt/c/Users/me/.ssh            /home/me/.ssh           none    bind,default    0 0
 
# WSL2
C:\Users\me\.ssh\        /home/me/.ssh    drvfs rw,noatime,uid=1000,gid=1000,case=off,umask=0077,fmask=0177 0 0
Run Code Online (Sandbox Code Playgroud)

根据需要更新用户名和 UID/GID。