我在 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
除了一些问题之外,这种方法是可行的。
/mnt/c
中的文件具有
0777
权限,而
chmod
显然不会对它们执行任何操作。当我在 WSL2 中使用
ssh
时,它会抱怨该键:
Permissions 0777 for '/home/myuser/.ssh/id_rsa' are too open
.gitconfig
中,我将
core.excludesfile
设置为
C:\\\\Users\\myuser\\.gitignore
,这在 Windows 中使用 Git 时有效,但在 WSL2 中无效。如果我将其更改为
/home/myuser/.gitignore
,它可以在 WSL2 中运行,但不能在 Windows 上运行。我尝试使用相对路径
.gitignore
并完全删除
core.excludesfile
指令,但都不起作用。
(我有很多连接!) 通过 \\wsl$
访问密钥。但是,这并不能解决
core.excludesfile
问题,我更愿意在 Windows 中维护配置并通过
/mnt/c
在 WSL2 中访问它。
其他背景
我正在将我的开发环境从 Windows 转换为 WSL2,使用 PhpStorm 和 Docker 进行 PHP 开发。我已将 Docker 切换为使用 WSL2 后端而不是 Hyper-V,并将我的项目文件(即 git 存储库)移至 WSL2。然后,我使用\\wsl$
共享在 PhpStorm 中打开该项目。所有这些都运行良好,我喜欢它的速度有多快,但是必须复制 git 配置和 ssh 密钥很烦人。
在 WSL1/2 的
/etc/fstab
中,添加相应的条目:
# 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
根据需要更新用户名和 UID/GID。
~/.bashrc
文件中来复制文件夹。
cp -r /mnt/c/Users/myuser/.ssh ~/.ssh_new \
&& rm -rf ~/.ssh \
&& mv ~/.ssh_new ~/.ssh \
&& chmod 700 ~/.ssh \
&& chmod 400 ~/.ssh/* \
&& chmod 644 ~/.ssh/known_hosts \
&& chmod 644 ~/.ssh/*.pub