覆盖当前环境的 SSH 配置

Overriding SSH configuration for current environment

提问人:Peter Zaitcev 提问时间:11/15/2023 最后编辑:Peter Zaitcev 更新时间:11/15/2023 访问量:30

问:

TL;博士

是否有选项可以仅针对当前环境以任何方式覆盖 SSH 配置?即,为SSH-Agent提供一个选项,或设置环境变量以从文件中读取SSH配置等,而无需修改当前用户或系统配置?

问题

我正在尝试为我不拥有的存储库之一设置 CI。 在此期间,构建工具(flutter)使用非标准身份验证流程将命令调用到私有存储库。克隆过程是在依赖项下载的项目依赖项期间由第三方工具调用的,因此我无法控制 Git URL。git clone

普通 Git 身份验证(等效的 SSH 配置):

Match Host xxx User git
    User git
    Port 12345
    IdentityFile yyy

通常,用户名是 ,port 是 22,身份文件是。 可以在 Git URL 中指定不同的用户名和端口,并且可以通过 SSH 代理注入不同的公钥。git~/.ssh/id_rsa

问题在于,私有 Git 存储库使用非标准的 SSH 模型,通过“用户名 + ssh 密钥”对对对用户进行身份验证,而不仅仅是通过 SSH 密钥。

需要以下配置:

Match Host xxx User git
    User username
    Port 12345
    IdentityFile yyy

URL 中指定的端口有时是正确的,而用户名永远不正确(它们不包含导致用户名的端口)。git

我试过了什么

我尝试了以下方法:

  • 注入 SSH 代理以提供 SSH 密钥(SSH 密钥包括用户名)->不起作用
  • 在运行时修补依赖项配置以更改所有 Git URL 以包含用户名 -> 导致依赖项成功,但在 deps 的 deps 上失败。
  • 阅读所有关于 CLI、CLI 和 Flutter(构建工具)的文档 - >没有帮助sshssh-agent

重写 URL:

日志文件是匿名的

[build-multiplatform] [TRACE] Replacing 'ssh://private-repo.org:12345/top-level/dependency' with 'ssh://[email protected]:12345/top-level/dependency'...
[build-multiplatform] Rewriting file 'pubspec.yaml'...
[Pipeline] writeFile
[Pipeline] sh
00:00:15.023  + flutter clean
00:00:15.274  + flutter pub get
00:00:16.186  Resolving dependencies...
00:02:52.433  Git error. Command: `git clone --mirror ssh://private-repo.org/second-level/dependency /home/jenkins/.pub-cache/git/cache/flutter_app_components-323d1175f93598320dc758a60eaf879c64d41c0f`
00:02:52.433  stdout: 
00:02:52.433  stderr: Cloning into bare repository '/home/jenkins/.pub-cache/git/cache/flutter_app_components-323d1175f93598320dc758a60eaf879c64d41c0f'...
00:02:52.433  ssh: connect to host private-repo.org port 22: Connection timed out
00:02:52.433  fatal: Could not read from remote repository.
00:02:52.433  
00:02:52.433  Please make sure you have the correct access rights
00:02:52.433  and the repository exists.
00:02:52.433  exit code: 128

请注意上面日志中二级依赖项中的端口 (none -> 22) 和用户名 (none -> git)。

我不能做什么

  • 修改全局(系统)或用户 SSH 或 Git 配置(使 CI 基础结构相关)
  • 修改服务器身份验证模型(无访问权限)
  • 修改或覆盖依赖项的源代码,包括其依赖项列表(无权访问)
  • 修改构建收费(第三方)
  • 手动调用(需要对构建工具进行逆向工程)git clone
  • 添加本地 Git 配置(克隆处理到临时目录)
  • 以管理员/超级用户身份执行任何命令(CI 用户不是其中之一)

我能做些什么

  • 覆盖任何环境变量
  • 修改或覆盖顶级源代码
  • 修改当前目录中的任何文件
  • (可能)在 Docker 中执行构建(需要一些额外的设置,但可能)
flutter git cicd ssh-config

评论

0赞 Jim Redmond 11/16/2023
您正在使用哪个 CI 工具,以及哪个第三方工具调用存储库?
0赞 Peter Zaitcev 11/16/2023
詹金斯;扑动。后者写在问题中顺便说一句

答: 暂无答案