在 Windows 10 上为 GitHub 启用多个 SSH 密钥

2024-02-25

我有 2 个 GitHub 帐户,我无法为这两个帐户使用相同的公钥。我已经生成了2个ssh密钥

  • ‪C:\Users\{User_Name}\.ssh\id_rsa
  • ‪C:\Users\{User_Name}\.ssh\id_rsa_another

我的问题是,如何在 Windows 上使用多个 ssh 密钥?在 Linux 上,我只需使用以下命令添加ssh-add命令,但在 Windows 上,该命令不存在。

我做了什么才能使其他 ssh 密钥工作,我必须更改id_rsa to id_rsa_temp and id_rsa_another to id_rsa。我知道这很愚蠢。


首先,ssh-add 存在于 Windows 上,作为 Git For Windows 的一部分:

C:\Users\vonc>where ssh-add
C:\Program Files\Git\usr\bin\ssh-add.exe

它需要缓存保护私钥的密码(这并不总是需要的,因为您可以创建没有密码的私钥)

使用不同的帐户,如评论所述,使用 %USERPROFILE%.ssh\config 文件,其中包含:

Host gh1
  Hostname github.com
  User git
  IdentityFile ~/.ssh/id_rsa
Host gh2
  Hostname github.com
  User git
  IdentityFile ~/.ssh/id_rsa_another

您可以使用以下方法测试它们:

ssh -Tv gh1
ssh -Tv gh2

您应该看到每个键都有不同的“欢迎”消息。

用于克隆存储库的 URL 为:

gh1:user1/repo1
gh2:user2/repo2

当且仅当您的 ssh 私钥已加密(受密码短语保护)时,您需要一个 .bashrc 来启动 SSH 代理,并在其中注册您的密钥,从而有效地缓存所述密钥。

See "在适用于 Windows 的 Git 上自动启动 ssh-agent https://docs.github.com/en/authentication/connecting-to-github-with-ssh/working-with-ssh-key-passphrases#auto-launching-ssh-agent-on-git-for-windows"

你可以运行ssh-agent当您打开 bash 或 Git shell 时自动。
复制以下行并将其粘贴到您的~/.bashrc (%USERPROFILE%/.bashrc) Git shell 中的文件:

env=~/.ssh/agent.env

agent_load_env () { test -f "$env" && . "$env" >| /dev/null ; }

agent_start () {
    (umask 077; ssh-agent >| "$env")
    . "$env" >| /dev/null ; }

agent_load_env

# agent_run_state: 0=agent running w/ key; 1=agent w/o key; 2=agent not running
agent_run_state=$(ssh-add -l >| /dev/null 2>&1; echo $?)

if [ ! "$SSH_AUTH_SOCK" ] || [ $agent_run_state = 2 ]; then
    agent_start
    ssh-add
    ssh-add ~/.ssh/id_rsa_another
elif [ "$SSH_AUTH_SOCK" ] && [ $agent_run_state = 1 ]; then
    ssh-add
    ssh-add ~/.ssh/id_rsa_another
fi

unset env

您必须在第一次启动时输入密码,然后不再输入:所述密码将由代理缓存。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Windows 10 上为 GitHub 启用多个 SSH 密钥 的相关文章

  • 如何在 Windows 命令行中使用参数运行 Python 脚本

    这是我的蟒蛇hello py script def hello a b print hello and that s your sum sum a b print sum import sys if name main hello sys
  • 带有 git Remote 的 Gem 文件在 Heroku 推送上失败

    我的 gemfile 中有以下行 gem client side validations git gt email protected cdn cgi l email protection Dakuan client side valida
  • 为所有子文件夹设置 git 配置值

    我知道可以设置每个存储库的配置来覆盖用户级配置 即 path to my repo gitconfig覆盖 gitconfig 是否可以设置 git 配置来覆盖给定文件夹的所有子文件夹的用户级设置 即 我有 topLevelFolder1
  • 更新另一个 Action 的工作流程文件的 GitHub Action

    我在同一个存储库中有两个 GitHub Actions 我正在尝试更新其中一个 但在尝试提交并推送更改时出现以下错误 remote rejected HEAD gt some branch refusing to allow a GitHu
  • Git 在哪里存储标签?

    Git 在哪里存储标签 我执行 git tag v0 1 0 v0 10 0 v0 11 0 但目录 git refs tags是空的 Git 将这些标签存储在哪里 谢谢 它们也可以存储在 git packed refs
  • 为什么我的 Github 托管网站响应 HTTP 302 而不是 200?

    我拥有该域名penkov id au http penkov id au 我主持一个blog http michael penkov id au blog 2014 01 02 reinventing the wheel html usin
  • Windows 上的 boot2docker 缺少 apt-get / 包管理器

    我在 boot2docker 中 我不确定我完全理解它 但它似乎是我正在进行的项目所需要的 我已经通过 ssh 登录了 并且尝试对我们的项目进行 make 但是我得到了 make not found 然后我尝试了一个 apt get ins
  • 为什么 Git 无法将文件更改与修改后的父级/主控合并?

    我有一个文件 里面只有一行 我创建一个分支并向同一文件添加第二行 保存并提交到分支 我切换回主人 并向文件中添加不同的第二行 保存并提交给master 现在总共有 3 条独特的线路 如果我现在尝试将分支合并回主分支 则会遇到合并冲突 为什么
  • 如何在Windows中的Python 3.9下pip安装pickle?

    我需要pickle https docs python org 3 9 library pickle html module pickle包安装在我的下面Python 3 9在 Windows 10 下 我尝试过的 当尝试与pip inst
  • Windows 8 Metro 应用程序(网格应用程序)过渡时出现黑色闪烁

    我正在基于网格应用程序模板构建 Windows 8 Metro 应用程序 一切都很顺利 直到我尝试更改应用程序的主题和背景 我将图像背景应用于所有 3 个 XAML 页面的网格 另外 我在应用程序包清单中将主题更改为 Light 但它没有执
  • 如何捕获未发送到 stdout 的命令行文本?

    我在项目中使用 LAME 命令行 mp3 编码器 我希望能够看到某人正在使用什么版本 如果我只执行 LAME exe 而不带参数 我会得到 例如 C LAME gt LAME exe LAME 32 bits version 3 98 2
  • 什么是 SO_SNDBUF 和 SO_RCVBUF

    你能解释一下到底是什么吗SO SNDBUF and SO RCVBUF选项 好的 出于某种原因 操作系统缓冲传出 传入数据 但我想澄清这个主题 他们的角色 通 常 是什么 它们是每个套接字的缓冲区吗 传输层的缓冲区 例如 TCP 缓冲区 和
  • 从其可执行文件的路径获取服务名称

    我有一个可执行文件的路径 它是一个正在运行的服务应用程序 例如 C Program Files x86 Someapp somesvc exe 我想停止并启动它 为此我想我需要获取服务的名称 如下所示 this https stackove
  • 用于推送通知的设备令牌

    我正在实施推送通知服务 我需要创建一个数据库来存储 4 个移动平台的所有设备令牌 我想根据他们的平台 iOS Android BlackBerry WP7 来组织它们 但是有什么方法可以区分平台 这样如果我只想向 Android 用户发送消
  • `git push` -- 没有输出,什么也没有发生

    touch test git add test git commit m test git push u origin master 这奏效了 该文件已上传到存储库 rm test cp R website website git rm t
  • 如何减少 Bitbucket 上的 git repo 大小?

    我的问题摘要 在我向两个现有文件添加了几百个字节后 我在 Bitbucket 上的一个私人存储库的大小突然增加了一倍多 该存储库现在超过 2GB 这导致 Bitbucket 将其置于只读模式 因为它处于只读模式 所以我无法推送会减少存储库大
  • 已达到网络 BIOS 命令限制

    我的 ASP Net 应用程序从另一台 Windows 服务器上的共享文件夹获取文件 当请求增加时 我收到以下错误 The network BIOS command limit has been reached 我已按照以下步骤操作微软 K
  • VSTS:在构建过期的情况下自动变基/合并和重新排队构建验证门

    我们最近对 PR 上的构建验证门进行了更改 这样 如果另一个提交在当前 PR 完成之前进入主分支 则构建会 立即 过期 看here https stackoverflow com questions 49418800 vsts invali
  • 如何一步步遍历目录树?

    我发现了很多关于遍历目录树的示例 但我需要一些不同的东西 我需要一个带有某种方法的类 每次调用都会从目录返回一个文件 并逐渐遍历目录树 请问我该怎么做 我正在使用函数 FindFirstFile FindNextFile 和 FindClo
  • 有没有一个简单的命令可以将分支转换为标签?

    我即将完成将 哑快照 转换为 git 的繁琐过程 这个过程进展得非常顺利 感谢这个重命名过程 https stackoverflow com questions 6628539 how to tell git that its the sa

随机推荐

  • Jquery Ajax 验证复选框

    可能是一个简单的解决方案 所以我有点尴尬 但 JS 并不是我的强项 所以我想我会问 我正在使用Jquery表单 http jquery malsup com form 用于提交一组复选框以满足我正在制作的活动策划应用程序的要求的插件 如果没
  • 源代码管理中的 .vcxproj

    我一直在阅读很多关于 vcxproj 文件是否应该添加到源代码管理中的问题 共识似乎是他们应该这样做 但是当打开文件时 我注意到其中包含很多用户特定的路径 鉴于这是一个由很多人共同开发的项目 我还应该将其添加到源代码管理中吗 看起来它会与其
  • Json.NET - CustomCreationConverter 中单个属性的默认反序列化行为

    在下面的场景中 我如何得到CrazyItemConverter当遇到我要反序列化的类型中存在的 JSON 属性时 是否照常进行 我有一些如下所示的 JSON Item Name Apple Id null Size 5 Quality 2
  • Symfony sfDoctrineGuardPlugin 自定义登录查询

    我使用 symfony sfDoctrineGuardPlugin 来管理前端用户和后端用户的身份验证 没关系 只是我不希望前端用户能够登录后端应用程序 我可以设置凭据 但在用户通过身份验证后会检查凭据 我想要的是以表单形式登录 永远不会验
  • 使第二个弹性列可滚动

    我看到这个例子来自Flex flex column 内的可滚动 div https stackoverflow com questions 34157058 flex scrollable div inside flex column并尝试
  • 安装 Vuetify 后需要额外的加载器

    使用最新的 VueCli 构建的干净项目 使用 vue add vuetify 添加了 Vuetify 一切正常 添加了身份验证脚本 我今年已经成功使用了 3 次 现在我收到此错误 ERROR Failed to compile with
  • Visual Studio 2015 - 用户任务消失了?

    我最近从 Visual Studio 2013 切换到 2015 并转换了所有旧项目 但是 现在我似乎找不到我的用户任务了 任务列表中曾经有一个下拉菜单 但看起来在新版本中已经消失了 除非我遗漏了一些东西 用户任务是否被删除 如果是这样 我
  • Web3.py:使用待处理过滤器时出现 ValueError

    我正在尝试使用 web3 py 查找 BEP20 网络中的待处理交易 如中所述在这个堆栈溢出问题中 https stackoverflow com questions 57201888 different ways of getting e
  • 使用泛型和协议作为类型参数之间的区别,在函数中实现它们的优缺点是什么

    由于 Swift 允许我们在函数中使用 Protocol 和 Generic 作为参数类型 所以我想到了下面的场景 protocol AProtocol var name String get class ClassA AProtocol
  • 检查php中是否存在session

    在我的 php 函数中 我想检查会话是否存在 根据会话的存在 我想返回 true 或 false 我有一个登录功能 它使用session start 并在登录时将值存储到会话变量中 并且在注销时将执行此操作session destroy 现
  • list.extend 和列表理解[重复]

    这个问题在这里已经有答案了 当我需要向列表中添加几个相同的项目时 我使用 list extend a a b c a extend d 3 Result a b c d d d 但是 如何与列表理解进行类似的操作呢 a a 2 b 2 c
  • CSS @page 中的不同大小:第一个结果整个@page 大小相同

    它与打印有关 并且仅与打印有关 css page size A4 portrait page first size 210mm 1000mm 根据 CSS 的定义 只有首页高度为 1000 毫米 其余页面高度为 297 毫米 A4 但在 C
  • 为什么在 JavaScript 中返回时要使用括号?

    在Restify框架代码中我发现了这个函数 function queryParser options function parseQueryString req res next Some code goes there return ne
  • 获取逗号分隔字符串的第一个值[重复]

    这个问题在这里已经有答案了 我正在寻找从逗号分隔的字符串中获取第一个值的最快 最短的方法 in line 我能做的就是 string a b c d echo The first thing is end array reverse exp
  • 在 Cypher 查询中使用正则表达式捕获组

    在密码中文档 http docs neo4j org chunked milestone query where html regular expressions它说您可以使用正则表达式来匹配字符串属性中的特定 先前已知 模式 是否也可以使
  • WPF 着色器效果 - 抗锯齿不显示

    我遇到一个问题 我有一个 WPF 着色器效果 由 Rene Schulte 修改 来模拟点阵显示 DMD 一切都很好 但所有的点都是别名的 See attached image 我尝试了WPF中的许多功能 以带来抗锯齿 但无济于事 在构造函
  • 按退出键退出循环

    我试图通过按转义键退出循环 但我的程序不起作用 有没有办法做到这一点 我的代码 import win32api import win32con import time from msvcrt import kbhit getch def c
  • 使用 Java 代码向 main_activity 视图添加按钮

    我想添加一个Button to the main activity使用java代码查看 那么我该怎么做呢 我已经尝试过这段代码 不幸的是它不起作用 public class MainActivity extends Activity But
  • mave 3.2 无法访问本地 Nexus 实例返回 502 代码

    访问本地主机中的本地 Nexus 存储库时 返回代码为 502 pom xml 看起来像这样
  • 在 Windows 10 上为 GitHub 启用多个 SSH 密钥

    我有 2 个 GitHub 帐户 我无法为这两个帐户使用相同的公钥 我已经生成了2个ssh密钥 C Users User Name ssh id rsa C Users User Name ssh id rsa another 我的问题是