让WSL和Windows共享SSH私钥
前言
今天在VSCode上连接WSL写代码时,发现我没有为WSL配置SSH私钥。但是同一台电脑不想生成两份key。所以打算共享Windows上的私钥到linux下。
本文将介绍如何共享Windows上的私钥到WSL,并设置正确的权限。
建立软连接
首先,我们需要在WSL中创建一个软连接,将Windows上的.ssh文件夹链接到WSL中。在WSL终端中输入以下命令:
1 | cd ~ |
需要注意的是,创建软连接前需要保证~目录下不存在.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 | [automount] |
保存后在Windows控制台中重启WSL
1 | wsl -t ubuntu //ubuntu为你的WSL分发名 |
再次cd到~/.ssh
目录,使用chmod修改权限
1 | chmod 600 id_rsa |
可以通过ls命令确认权限修改成功。
1 | ls -l |
使用SSH
现在,你已经成功地将Windows上的SSH私钥共享到WSL中,并设置了正确的权限。你可以使用SSH来连接远程服务器,上传代码等等。