在Windows上与Bash共享专用SSH密钥


18

我已经安装了Windows 10和Git。这个Git使用我的C:/Users/MyName目录作为HOME目录以及其中的/.ssh/目录,以适当地获取我的私有SSH密钥。

我刚刚启用并设置了“ Windows上的Ubuntu上的Bash”(真是个大难题!),并且还在其中安装了Git。我希望两个Gits都使用相同的密钥集,这样无论我在此计算机上工作的环境如何,我的提交始终来自我。

麻烦的是,bash中的HOME目录不同(/home/MyName),因此看不到位于现在远处的键../../mnt/c/Users/MyName/.ssh。我以为我可以通过使用以下方法更改HOME环境变量来成为赢家

export HOME=/c/mnt/Users/MyName

这确实成功更改了HOME目录,但bash git仍然看不到该./.ssh目录中包含的密钥。

我不确定这是否是A),因为bash git期望键采用其他文件格式?(当前是id_rsaid_rsa.pub)B)bash git忽略更改后的HOME变量?或两者兼而有之。

我也不确定C)像这样随意更改HOME变量是否在一般情况下是一个好主意,而其他可能引用它的程序也可以吗?


2
听起来是时候进行符号链接了。
Telastyn

.ssh已经存在/home/MyName...一个符号链接文件可以吗?这样我会做ln -s /mnt/c/Users/MyName/.ssh/id_rsa /.ssh/id_rsa什么?(也是符号链接的新功能!)
Toby

繁荣!那很有效!@Telastyn,如果您想发表评论,我会接受的:-)(尽管我仍然不确定为什么只更改HOME变量起初没有作用)
Toby

2
如果对整个.ssh目录进行符号链接,则效果更好。
tripleee

1
我的记忆是PuTTY会将它们的东西放在不同的位置,但是距离我上次不得不接触Windows已有一年多了(感谢$ dmr)
三点

Answers:


19

因此,正如Telastyn所评论的那样,我~/.ssh/使用以下命令在WSL中向id_rsa和id_rsa.pub 添加了符号链接:

> 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

使用相同的技术来代替三元组建议的链接符号链接目录,直到遇到我在ln命令中使用的斜杠(使用tab键保留bash填写目录名称)后,我才遇到问题。因此,最好不要这样做:

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

在Windows中我对它的使用(在ssh-agent中使用ssh-agent在powershell中使用git)和WSL中对SSH的使用之间,在known_hosts文件上确实稍有不同,因此在Windows版本中不对主机名和IP进行哈希处理。根据ssh-config的手册页,有一个可用于禁用此哈希的标志,我认为这是SSH可以理解的文件,而到目前为止尚无哈希。

后一种方法意味着在两个不同环境之间使用的SSH的详细信息完全相同。

感谢MatějKříž指出了一个小而重要的失落角色!


3
应该> ln -s /mnt/c/Users/MyName/.ssh/id_rsa ~/.ssh/id_rsa加上“〜”。不?
马捷Kříž

7
请注意,无法在两个目录之间使用private keysfrom bash on windowsif命令s link。这样做将导致ssh agent抱怨私钥文件的权限错误。由于从窗口挂载的文件,其权限无法更改。
橡树

@oak完全可以用bash吗?
Tj Gienger

@TjGienger是什么意思?
橡木

@oak,这也许是黑色实体试图在下面解决的问题吗?还是解决另一个问题?
sferencik

11

基于新版本,“ Insider Build 17063”的文件权限现在有所不同。简而言之,您需要执行以下操作:

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

这将使ssh文件夹的权限根据需要工作。然后按照OP在他的回答中建议的步骤进行处理。

相关链接:

https://github.com/Microsoft/WSL/issues/3181 https://blogs.msdn.microsoft.com/commandline/2018/01/12/chmod-chown-wsl-improvements/

编辑

我回到这个问题,因为我发现这只是临时解决方案(是的,我很愚蠢)。每次重新启动(注销)WSL时,都需要再次投射此命令。

因此,现在适用于我的解决方案是/etc/wsl.conf在wsl ubuntu中编辑(创建)配置文件,并将其放入以下内容,然后重新启动以再次进行挂载:

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

为什么添加元数据:

Linux权限作为附加元数据添加到文件中。这意味着文件可以具有Linux和Windows的读/写/执行权限位。

为什么要设置uid和gid:

默认情况下,WSL将uid和gid设置为默认用户的值(在Ubuntu发行版中,默认用户使用uid = 1000,gid = 1000创建)。如果用户通过此键显式指定了gid或uid选项,则关联的值将被覆盖。否则,将始终附加默认值。

相关链接:

https://docs.microsoft.com/zh-cn/windows/wsl/wsl-config https://blogs.msdn.microsoft.com/commandline/2018/02/07/automatically-configuring-wsl/ https:/ /blogs.msdn.microsoft.com/commandline/2018/01/12/chmod-chown-wsl-improvements/

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.