windows - 在 Windows 上通过 JetBrains IDE(即 PyCharm)使用 Git 时如何自动使用特定的 SSH 密钥?
问题描述
在 Windows 上通过 PyCharm 使用 Git 时,我想使用特定的 SSH 密钥。
我尝试过的事情:
尝试通过调整
~/.ssh/config
这些答案中提到的(和权限)来配置 SSH:- https://stackoverflow.com/a/31044770/8488985
- https://stackoverflow.com/a/11251797
- https://superuser.com/a/232406 (有关权限的评论请参阅)
这在 Git Bash 命令行中使用时启用了 Git,但是在使用 IDE 时它不起作用。
尝试将 SSH 密钥添加到
ssh-agent
此处提到的:同样,这在 Git Bash 命令行中使用时启用了 Git,但是在使用 IDE 时它不起作用。
我还可以做些什么?
解决方案
显然 JetBrains IDE(如 PyCharm)使用 Windows 命令行与 git 交互。
看 这里
所以第一步是启动 Windows 命令提示符并检查是否可以通过这种方式使用带有特定 SSH 密钥的 Git。
就我而言,这是不可能的,即使我已经配置了config
位于~/.ssh/config
(通过 Git Windows 访问时)或C:\Users\<Me>\.ssh\config
.
这就是为什么我的问题中提到的 SO 帖子没有解决我的问题。
第二步是找出当通过 Windows 命令提示符访问时 Git 使用的是哪个配置文件。
这ssh_config
为我提供了一个线索,即 Windows 上的 Git 可以使用一个名为(而不是)的内部 ssh 配置文件,该文件config
位于 git.exe 附近(而不是在您的 homedir 的子目录中)。我使用which
找到了 Git 的位置。
所以我正在寻找的配置位于.where git
C:\Program Files\Git-2.16.1\cmd\git.exe
C:\Program Files\Git-2.16.1\etc\ssh\ssh_config
第三步是调整该ssh_config
文件类似于该config
文件。
对我来说,这看起来像这样:
Host <some-name>
HostName gitlab.com
IdentityFile C:\Users\<Me>\.ssh\<my-non-default-key>
# Prevents usage of the default IdentityFile
# See: https://stackoverflow.com/a/11251797
IdentitiesOnly yes
# Prevents warning when pulling from Gitlab.
# See: https://stackoverflow.com/a/67556915
UpdateHostKeys no
第四步也是最后一步是更改 Git 存储库中的远程,使其使用文件<some-name>
中指定的名称ssh_config
。
首先使用git remote -v
.
这给出了这样的结果:
git@gitlab.com:some/subdirs/to/the/repository.git
现在换出文件中指定的gitlab.com
部分,如下所示:<some-name>
ssh_config
git remote set-url origin git@<some-name>:some/subdirs/to/the/repository.git
概括:
- 当使用像 PyCharm 这样的 JetBrains IDE 时,它使用 Git 而不是 Windows 命令提示符
- 在 Windows 命令提示符中找出 Git 的位置
- 调整位于此 Git 位置的 ssh_config 文件
- 设置存储库的远程 url,使其使用 ssh_config 文件中指定的主机名
推荐阅读
- html - Katex 无法正确显示
- vue.js - 单击外部时防止下拉关闭
- ionic-framework - 使用离子和电容器创建自定义相机预览覆盖
- python - 如何使用json中的索引遍历键?(Python)
- node.js - NODE JS 更新集合中的特定字段而不影响其他字段
- javafx - LineChart 中没有显示任何内容
- lambda - 从 Curry-0、1、2 到 ...n
- spring-boot - 删除错误请求响应的附加详细信息
- javascript - react native中的androidsurfaceview原生ui组件渲染问题
- go - 为什么我在 go.mod 中指定了旧的 go 版本,却可以使用新版本的 go 的 API?