gpt4 book ai didi

git - 如何通过 ssh 获取托管在 Azure DevOps Repo 中的 Terraform 模块

转载 作者:行者123 更新时间:2023-12-04 03:35:19 24 4
gpt4 key购买 nike

寻找通过 SSH 获取托管在私有(private) Azure DevOps git 存储库中的 Terraform 模块的正确/工作方式(参见 TF Docs on Git repo sourcing via ssh)。
拥有 PAT token 是不可取的,因为它最终会过期并且还不能自动续订 (although coming soon apparently)。尽管如此,已经验证了 https 方法,但如果我可以作为模块源引用 can't include terraform vars at init time,我想避免需要编辑源。 .
我关注了以下steps生成 ssh 私钥/公钥对,这些文件已添加到我的本地 .ssh文件夹@ C:\Windows\Users\<username>\.ssh .
下面的示例地形代码:

module "test" {
source = "<ref>"
}
在哪里 <ref>已经过测试:
  • git::https://<pat token>:dev.azure.com/<org name>/<project name>/_git/<repo name>//<sub path>?ref=<version ref> - 作为最后手段的工作/验证 https 方法
  • git::ssh://git@ssh.dev.azure.com:v3/<org name>/<project name>/_git/<repo name>//<sub path>?ref=<version ref>
  • git::ssh://git@ssh.dev.azure.com/v3/<org name>/<project name>/_git/<repo name>//<sub path>?ref=<version ref> - see terraform/issues/18869

  • 在阅读了 multiple keys 之后这里:

    Generally, if you configure multiple keys for an SSH client and connect to an SSH server, the client can try the keys one at a time until the server accepts one. However, this doesn't work with Azure DevOps for technical reasons related to the SSH protocol and how our Git SSH URLs are structured. Azure DevOps will blindly accept the first key that the client provides during authentication. If that key is invalid for the requested repo, the request will fail with the following error: remote: Public key authentication failed.fatal: Could not read from remote repository.


    我玩弄了我的 .ssh/config文件包括
  • 删除除 automation 之外的所有其他键我想专门用于这种情况的 ssh key 对(而不是我自己的个人 SSH key 来识别我)
  • 更新.ssh/config看起来像:
  • Host automation
    HostName ssh.dev.azure.com
    IdentityFile ~/.ssh/automation_account
    IdentitiesOnly yes
    Host azuredevops
    HostName ssh.dev.azure.com
    IdentityFile ~/.ssh/azuredevops
    IdentitiesOnly yes
    然后在 <ref> 内试:
  • git::ssh://git@automation/v3/<org name>/<project name>/_git/<repo name>//<sub path>?ref=<version ref>
  • git::ssh://automation/v3/<org name>/<project name>/_git/<repo name>//<sub path>?ref=<version ref>

  • 所有这些尝试都会导致:
    Permission denied, please try again.
    git@ssh.dev.azure.com: Permission denied (password,publickey).
    fatal: Could not read from remote repository.
    或者
    does not appear to be a git repository
    fatal: Could not read from remote repository.
    我正在使用的 ssh key 已通过获取指纹 ssh-keygen -E md5 -lf <path to private key> 验证它已在 Azure DevOps 中注册。并返回 2048 MD5:ab:e2:... automation (RSA)我可以在我的 SSH key 下确认 Azure DevOps 中存在。
    我已验证该 key 允许我通过使用该特定 key 添加新的 git 远程访问我的目标 TF 存储库之一。 git remote -v给我:
    aorigin       git@automation:v3/<org name>/<project name>/_git/<repo name> (fetch)
    aorigin git@automation:v3/<org name>/<project name>/_git/<repo name> (push)
    origin git@ssh.dev.azure.com:v3/<org name>/<project name>/_git/<repo name> (fetch)
    origin git@ssh.dev.azure.com:v3/<org name>/<project name>/_git/<repo name> (push)
    还有一个 git pull aorigin按预期工作。 Origin 是来自 Azure DevOps gui 的原始 SSH 克隆 URL。
    几乎可以肯定我遗漏了一些明显的东西,但经过广泛的谷歌搜索和许多不同的配置,我一生都无法让它工作。帮助/指针/建议赞赏
    工具版本:
  • Terraform v0.13.4
  • git 版本 2.17.1.windows.2
  • OpenSSH_for_Windows_7.7p1,LibreSSL 2.6.5
  • 最佳答案

    是的,这是可能的,我自己已经成功完成了多个项目:
    对于 VSTS URL:

    source = "git::ssh://OrgName@vs-ssh.visualstudio.com/v3/OrgName/ProjectName/RepoName//DirectoryName"
    或者对于 Azure DevOps URL:
    source = "git::ssh://git@ssh.dev.azure.com/v3/OrgName/ProjectName/RepoName//DirectoryName"
    请注意,即使您的源设置正确,如果您的已知主机文件不是最新的,您可能会收到一条错误消息,提示您检查您的权限,这非常具有误导性。
    在 ssh.dev.azure.com 或 vs-ssh.visualstudio.com 上运行 ssh-keyscan 以获取已知主机条目。
    您也可以使用 SSH 从私有(private) Github 存储库中提取。
    引用: https://jimferrari.com/2022/01/12/use-terraform-modules-from-private-github-in-azure-devops/

    关于git - 如何通过 ssh 获取托管在 Azure DevOps Repo 中的 Terraform 模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67018840/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com