Visual studio code 在使用远程容器时,如何运行多个VS代码实例以使用不同的身份与远程git存储库交互?
抱歉发了这么长的邮件 我有一个使用容器的VS代码远程开发设置。我在同一个git服务器上有多个用户帐户。我使用基于密钥的身份验证与git服务器交互。我在主机中使用Ubuntu18.04LTS,在容器中使用DebianBusterVisual 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
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代理的正确转发
谢谢你的耐心