前言

今天在VSCode上连接WSL写代码时,发现我没有为WSL配置SSH私钥。但是同一台电脑不想生成两份key。所以打算共享Windows上的私钥到linux下。

本文将介绍如何共享Windows上的私钥到WSL,并设置正确的权限。

建立软连接

首先,我们需要在WSL中创建一个软连接,将Windows上的.ssh文件夹链接到WSL中。在WSL终端中输入以下命令:

1
2
cd ~
ln -s /mnt/c/Users/your name/.ssh .

需要注意的是,创建软连接前需要保证~目录下不存在.ssh文件夹。可以先rm -rf .ssh将该文件夹删除。

如果.ssh文件夹里有需要的文件不可以删除,可以考虑在.ssh文件夹里单独对Windows下的某个key创建软连接。

设置权限

设置完软连接,此时我们直接使用ssh会提示:

Permissions 0777 for '/home/your name/.ssh/id_rsa' are too open.

这是因为SSH私钥的权限太高,需要修改.

我们可以使用chmod命令修改文件权限,但是在WSL中,访问挂载的Windows文件时,权限是根据Windows权限计算的或者通过元数据读取。

默认情况下,元数据未启用,因此使用chmod命令修改权限时只能同时去除或添加写的权限,类似于在Windows中将文件修改为只读。

详情可以参考微软关于WSL的文件权限的文档说明。

为了自定义权限,我们需要启用元数据这个功能。在WSL终端中使用以下命令打开wsl的配置文件:

在WSL终端中使用以下命令打开wsl的配置文件

1
sudo vi /etc/wsl.conf

在里面添加如下内容:

1
2
[automount]
options = "metadata"

保存后在Windows控制台中重启WSL

1
2
wsl -t ubuntu       //ubuntu为你的WSL分发名
wsl

再次cd到~/.ssh目录,使用chmod修改权限

1
chmod 600 id_rsa

可以通过ls命令确认权限修改成功。

1
ls -l

使用SSH

现在,你已经成功地将Windows上的SSH私钥共享到WSL中,并设置了正确的权限。你可以使用SSH来连接远程服务器,上传代码等等。