zoukankan      html  css  js  c++  java
  • Git SSH public key authentication failed with git on Azure DevOps

    Git SSH public key authentication failed with git on Azure DevOps

    This worked for me

    adding a config file in ~/.ssh/

    and adding these lines

    Host ssh.dev.azure.com
    IdentityFile ~/.ssh/my_ssh_private_key
    IdentitiesOnly yes
    

    This link by @wcoder helped

    Q: I have multiple SSH keys. How do I use different SSH keys for different SSH servers or repos?

    A: 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.
    

    For Azure DevOps, you'll need to configure SSH to explicitly use a specific key file. One way to do this to edit your ~/.ssh/config file (for example, /home/jamal/.ssh or C:\Users\jamal\.ssh) as follows:

    # The settings in each Host section are applied to any Git SSH remote URL with a
    # matching hostname.
    # Generally:
    # * SSH uses the first matching line for each parameter name, e.g. if there's
    #   multiple values for a parameter across multiple matching Host sections
    # * "IdentitiesOnly yes" prevents keys cached in ssh-agent from being tried before
    #   the IdentityFile values we explicitly set.
    # * On Windows, ~/.ssh/your_private_key maps to %USERPROFILE%\.ssh\your_private_key,
    #   e.g. C:\Users\<username>\.ssh\your_private_key.
    
    # Most common scenario: to use the same key across all hosted Azure DevOps
    # organizations, add a Host entry like this:
    Host ssh.dev.azure.com
      IdentityFile ~/.ssh/your_private_key
      IdentitiesOnly yes
    
    # This model will also work if you still use the older SSH URLs with a
    # hostname of vs-ssh.visualstudio.com:
    Host vs-ssh.visualstudio.com
      IdentityFile ~/.ssh/your_private_key
      IdentitiesOnly yes
    
    # Less common scenario: if you need different keys for different organizations,
    # you'll need to use host aliases to create separate Host sections.
    # This is because all hosted Azure DevOps URLs have the same hostname
    # (ssh.dev.azure.com), so SSH has no way to distinguish them by default.
    #
    # Imagine that we have the following two SSH URLs:
    # * git@ssh.dev.azure.com:v3/Fabrikam/Project1/fab_repo
    #   * For this, we want to use `fabrikamkey`, so we'll create `devops_fabrikam` as
    #     a Host alias and tell SSH to use `fabrikamkey`.
    # * git@ssh.dev.azure.com:v3/Contoso/Project2/con_repo
    #   * For this, we want to use `contosokey`, so we'll create `devops_contoso` as
    #     a Host alias and tell SSH to use `contosokey`.
    #
    # To set explicit keys for the two host aliases and to tell SSH to use the correct
    # actual hostname, add the next two Host sections:
    Host devops_fabrikam
      HostName ssh.dev.azure.com
      IdentityFile ~/.ssh/private_key_for_fabrikam
      IdentitiesOnly yes
    Host devops_contoso
      HostName ssh.dev.azure.com
      IdentityFile ~/.ssh/private_key_for_contoso
      IdentitiesOnly yes
    #
    # Then, instead of using the real URLs, tell Git you want to use these URLs:
    # * git@devops_fabrikam:v3/Fabrikam/Project1/fab_repo
    # * git@devops_contoso:v3/Contoso/Project2/con_repo
    #
    
    # At the end of the file, you can put global defaults for other SSH hosts you
    # may connect to.  Note that "*" also matches any hosts that match the sections
    # above, and remember that SSH uses the first matching line for each parameter name.
    Host *
  • 相关阅读:
    hadoop 异常及处理总结-02(小马哥精品)
    Linux环境变量(小马哥推荐)
    Apache Tomcat 8.5 安全配置与高并发优化
    深入理解分布式系统中的缓存架构(上)
    Redis的n种妙用,不仅仅是缓存
    springBoot整合ecache缓存
    Spark Streaming实时处理应用
    Spark 实践
    spark性能调优
    Spark调优
  • 原文地址:https://www.cnblogs.com/chucklu/p/15479011.html
Copyright © 2011-2022 走看看