This worked for me
adding a config file in
and adding these lines
Host ssh.dev.azure.com IdentityFile ~/.ssh/my_ssh_private_key IdentitiesOnly yes
This link by @wcoder helped
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,
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: # * email@example.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`. # * firstname.lastname@example.org: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 *