Visual studio code 在使用远程容器时,如何运行多个VS代码实例以使用不同的身份与远程git存储库交互?

Visual studio code 在使用远程容器时,如何运行多个VS代码实例以使用不同的身份与远程git存储库交互?,visual-studio-code,vscode-remote,ssh-agent,Visual Studio Code,Vscode Remote,Ssh Agent,抱歉发了这么长的邮件 我有一个使用容器的VS代码远程开发设置。我在同一个git服务器上有多个用户帐户。我使用基于密钥的身份验证与git服务器交互。我在主机中使用Ubuntu18.04LTS,在容器中使用DebianBuster Git Server - git.server.com Git urls - git@git.server.com:repo1.git - git@git.server.com:repo2.git Repo1 is used by User1 account Re

抱歉发了这么长的邮件

我有一个使用容器的VS代码远程开发设置。我在同一个git服务器上有多个用户帐户。我使用基于密钥的身份验证与git服务器交互。我在主机中使用Ubuntu18.04LTS,在容器中使用DebianBuster

Git Server - git.server.com
Git urls 
 - git@git.server.com:repo1.git
 - git@git.server.com:repo2.git

Repo1 is used by User1 account
Repo2 is used by User2 account

ssh-key for User1 - ~/.ssh/id_ed25519_user1
ssh-key for User2 - ~/.ssh/id_ed25519_user2
我已经在~/.ssh/config中创建了一个ssh配置

Host user1.git.server.com
    HostName git.server.com
    User git
    IdentityFile /home/user/.ssh/id_ed25519_user1
    IdentitiesOnly yes

Host user2.git.server.com
    HostName git.server.com
    User git
    IdentityFile /home/user/.ssh/id_ed25519_user2
    IdentitiesOnly yes
从主机中的终端,我可以对服务器进行身份验证

作为用户1:

ssh git@user1.git.server.com
作为用户2:

ssh git@user2.git.server.com
我可以启动多个vs代码实例,并且在vs代码终端内部(无需打开远程容器中的文件夹),我可以使用上述命令进行身份验证

一旦我们使用“在容器中重新打开”,事情就会变得有趣。 我没有在容器中装入.ssh/config文件夹,因此上述命令无法执行,因为出现错误:

Could not resolve hostname user1.git.server.com: Name or service not known
or
Could not resolve hostname user2.git.server.com: Name or service not known
出于明显的原因,我不想将我的
/ssh
文件夹装载到容器中。另外,也不可能使用
mount=type=ssh
,因为这不是构建容器,而是将容器作为开发环境使用

接下来我注意到ssh代理转发正在工作

ssh-add -l
如果在主机中的terminal、vs代码中的terminal(当文件夹在本地打开时)和vs代码中的terminal(当文件夹在远程容器中打开时)中执行上述命令,则都会返回相同的输出(user1和user2的标识键的指纹)

因此,在启动代码之前,我在主机终端中启动了一个新的ssh代理

~/repo1$ eval `ssh-agent -s`
~/repo1$ ssh-add ~/.ssh/id_ed25519_user1
~/repo1$ code .

and in another terminal
~/repo2$ eval `ssh-agent -s`
~/repo2$ ssh-add ~/id_ed25519_user2
~/repo2$ code .
在各自的主机终端和vs代码终端(不打开远程容器中的文件夹)中,我得到了所需的结果。我可以使用:

ssh git@git.server.com
所以我不再需要ssh配置文件。 但当文件夹在远程容器中打开时,这不起作用。VS代码仅连接到启动的第一个ssh代理。也就是说(在本例中),在VS代码远程容器中打开的repo1可以与所有git支持完美配合,但在VS代码远程容器中打开的repo2不能工作

在切换到远程容器时,如何指导VS代码使用哪个ssh代理转发到容器

变通办法 我目前使用的解决方法是使用默认ssh代理(Ubuntu在登录时启动ssh代理)。此代理已包含这两个标识。通过运行进行验证

ssh-add -l
像往常一样启动多个vs代码实例并切换到远程容器。 当我想要执行git操作时,我在主机终端中执行以下操作:

For repo1 (user1) operations
$ ssh-add -D
$ ssh-add ~/.ssh/id_ed25519_user1

For repo2 (user2) operations
$ ssh-add -D
$ ssh-add ~/.ssh/id_ed25519_user2
还有其他建议吗?是否可以将任何设置添加到devcontainer.json以实现ssh代理的正确转发

谢谢你的耐心