如何配置 VS Code 实现 git 密码免输入

目录

  • 问题描述
  • 尝试过的失败方法
  • 问题分析
  • 最终采用的解决方案:利用 ssh key 提供密码免输入功能
    • 安装 git windows 命令工具
    • 在windows本地生成 ssh key
    • 将公钥安装到 git 服务器
      • 第一种方法
      • 第二种方法
      • 调试方法
  • 参考资料:

问题描述

在 Windows 上,使用 Visual Studio Code 开发 typescript 项目,提交 git 代码总是会要求输入密码。
希望能像 IDEA 那样让 git 记住密码,不要每次都重新输入。

尝试过的失败方法

  1. 网上有人说可以用 git config --global credential.helper store,但测试了不行,因为我的 git 服务是 ssh 协议。
  2. 企图使用 ssh-agent 来解决问题,但其实可以不用 ssh-agent 参与也能解决问题。因为 ssh-agent 只是帮助提供 ssh key 的 passphrase
    什么是 ssh-agentssh key 以及 passphrase,请看这里。简单解释就是 ssh key 指的是‘非对称加密算法’中的一对字符串,一般比较长所以存放在文件中,分为私钥(private key)和公钥(public key)。要使用这个私钥(private key)时,为了安全起见,会再加一个简短的密码,要求用户手工输入,这个简短的密码就叫做passphrase
  3. 查找 VSCode 的 git 插件,企图让 VSCode 像 IDEA 那样记住 git 密码,但没有找到可用的插件。

问题分析

有一个很重要的考虑因素是你的 git 服务所提供的访问协议。常见的 git 服务协议大体有以下三类:

  1. ssh 协议
  2. git 协议
  3. https 协议
  4. git 管理系统

因为 ssh 协议简单,所以我目前采用的是这种协议,如果你的协议不是 ssh,那么下面的解决方案就只能提供参考了,不一定对症。

最终采用的解决方案:利用 ssh key 提供密码免输入功能

如果 git 的协议是 ssh,那么需要用 ssh key 方式访问 git 服务器,这样就可以避免每次提交/拉取时输入密码了,具体方法如下。

安装 git windows 命令工具

从这里下载并安装好 git windows 命令工具。git 命令行工具是一组命令程序的集合,而不只是一个简单的 exe 文件。包括 git.exe、ssh-add.exe 等 git 和 ssh 相关工具。

在windows本地生成 ssh key

生成的命令是:

ssh-keygen -o

-o 参数表示使用新的秘钥格式,而不是旧格式,更安全些。它会生成 rsa 秘钥/公钥 对。
秘钥路径不要修改,就放在默认路径下,即c:\Users\[用户名]\.ssh\ 中。
成功后,会看到下面2个文件:
如何配置 VS Code 实现 git 密码免输入_第1张图片

将公钥安装到 git 服务器

这一步是将你的公钥注册到 git 服务器,以便 git 服务器允许你连接、访问,通常问题就出现在这一步。
有两种方法实现公钥注册工作。

不管哪种方法,核心都是将公钥文件的内容复制、写入到服务器上 git 用户的一个文件中。
假设 Linux 服务器上,git程序的用户名是 gits,那么这个文件的路径就是 /home/gits/.ssh/authorized_keys
内容是一个公钥占一行,像下面这样:

公钥1
公钥2

只要将公钥内容放入这个指定文件,并设置好目录 .ssh/ 和文件 authorized_keys 的权限,最好设置为 600700不需要重启 sshd 等任何额外操作,就能生效了。如果有问题,也是其他问题,和 sshd 服务基本没有关系。

下面介绍两种注册公钥到git服务器的方法。

第一种方法

使用ssh-copy-id命令。

ssh-copy-id [email protected]

这里的 gits 是用户名,服务器域名是 gits.yourdomain.com。替换成你实际的用户名和域名即可,注意是能用ssh登录服务器的git系统用户名,不是所谓 git 管理系统的用户名。
然后输入gits用户的密码,程序会自动将当前windows本地用户的公钥写入到服务器的 authorized_keys 文件中。但这种方法只会写入 rsa 公钥,如果你还有其他公钥,它是不会写入的,需要你自己手工写入,这点需要注意。我也是在这里折腾了很长时间。

如何配置 VS Code 实现 git 密码免输入_第2张图片

第二种方法

手工复制公钥文件的内容,然后登录 git 服务器,修改 /home/gits/.ssh/authorized_keys 文件,粘贴进公钥内容即可。

注意有多个公钥文件(.pub)文件时,要全部写入,如果有遗漏那么可能登录失败,因为 ssh 可能用的就是你遗漏的那个公钥。我就是在这里折腾了很久,最后发现 git 使用的是 id_ed25519.pub 而不是新版的 rsa.pub 公钥。

调试方法

按照上面的步骤配置后,如果用 git pull 等命令时还是要求输入密码,那么可以用 xshell 等工具进行除错,查找问题原因。

方法是先确保用 ssh 可以无密码登录、连接 git 服务器。如果能达成这一步,那么就没问题了。

并且要注意,有多个公钥,那么多个公钥都需要测试成功,因为 git 指不定使用哪个公钥。

添加ssh key访问 git 服务器的 xshell 配置如下。
如何配置 VS Code 实现 git 密码免输入_第3张图片

参考资料:

  • ssh-agent 文档 清晰明了地解释了ssh-agent的作用,可以一读。
  • ssh agent详解,知乎文章,没点出 ssh-agent 的作用主要是管理 passphrase,不是必须的。
  • vscode 中用 ssh 协议访问 git,使用 ssh key 方式访问 git 服务的方法,但讲得不够清楚。
  • 用ssh访问git,git 官方文档,讲得过于简单。
  • ssh-copy-id 文档

你可能感兴趣的:(技术笔记,游戏,web开发,git)