git 对同一主机使用多个ssh密钥,但不使用别名

72qzrwbm  于 2022-12-25  发布在  Git
关注(0)|答案(3)|浏览(161)

我有两个bitbucket账户和ssh键需要匹配,我见过manysolutionsmanage通过别名在同一主机上使用多个键,但不幸的是,我需要git引用是通用的。
我需要它们是通用的原因是因为我正在用Pods开发共享项目,这意味着远程git源代码的url对于所有开发项目的开发者来说是相同的,但是我不能保证每个人都能设置和我一样的别名,也不应该期望他们这样做。
我曾尝试过这样指定用户帐户的愚蠢尝试:

Host BitbucketA
 HostName bitbucket.org
 IdentityFile ~/.ssh/id_rsa
 User UserA

Host BitbucketB
 HostName bitbucket.org
 IdentityFile ~/.ssh/id_rsa_userB
 User UserB

我想我可以指定使用id_rsa_userB来访问UserB的存储库,但不幸的是,这似乎不是它的工作方式。
有什么办法可以实现我的愿望吗?

d8tt03nd

d8tt03nd1#

你真的很接近一个解决方案,这基本上是我所做的,它确实工作。看到我的答案和下面的链接。
下面是我如何在Mac上为同一服务器上的两个帐户设置ssh密钥:
只有当您在同一个Git远程仓库上登录了两个不同的账户时,才需要这样做。
创建两个SSH密钥:

$ ssh-keygen -t rsa -f id_rsa_account1
$ ssh-keygen -t rsa -f id_rsa_account2

将此添加到~/.ssh/config

Host git_account1
        User git
        HostName git.xxxx.com
        IdentityFile ~/.ssh/id_rsa_account1
Host git_account2
        User git
        HostName git.xxxx.com
        IdentityFile ~/.ssh/id_rsa_account2

SSH将Host名称转换为User前面的HostName,并选择IdentityFile。这允许使用不同的ssl证书对同一URL进行两次或多次repos。
另见Nerderati:~/.ssh/config & git

iyr7buue

iyr7buue2#

您可以使用一对shell脚本和一个环境变量:

$ cat >~/bin/ssh-acct-one
#!/bin/sh
exec /usr/bin/ssh -i ~/.ssh/id_rsa_account1 $@
^D
$ chmod +x $_
$ GIT_SSH=ssh-acct-one git clone ssh://git@git.xxxx.com/...

......第二个标识文件也是如此。(最后一行的调用假定$PATH上有~/bin)。
这种笨拙的原因是Git将$GIT_SSH直接传递给exec()而不是/bin/sh -c等,因此不执行通常的 shell 扩展。
调试时,你也可以使用GIT_TRACE=1让Git显示正在执行的内容,并修改脚本,将-vvv传递给ssh,以报告正在执行的内容(包括它使用的密钥(标识文件))。

wswtfjt7

wswtfjt73#

我写了一个要点:https://gist.github.com/yinzara/bbedc35798df0495a4fdd27857bca2c1
您可以使用目录管理同一主机的多个密钥。

相关问题