提问人:Peter Zaitcev 提问时间:11/15/2023 最后编辑:Peter Zaitcev 更新时间:11/15/2023 访问量:30
覆盖当前环境的 SSH 配置
Overriding SSH configuration for current environment
问:
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(构建工具)的文档 - >没有帮助
ssh
ssh-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 中执行构建(需要一些额外的设置,但可能)
答: 暂无答案
评论