/ / Connectez-vous à un référentiel privé github avec libgit2 - macos, authentification, github, ssh, libgit2

Se connecter au dépôt github privé avec libgit2 - macos, authentification, github, ssh, libgit2

J'essaie d'extraire un référentiel privé github à l'aide de libgit2. Le référentiel appartient à une organisation et je dispose d'autorisations de lecture / écriture. Le programme est écrit en Objective-C ++. J'ai ceci:

- (int)fetchBranches
{
git_remote *remote = NULL;
int result = 0;
if (!(result = git_remote_load(&remote, repo, "origin"))) {
git_remote_callbacks callbacks = GIT_REMOTE_CALLBACKS_INIT;
callbacks.credentials = cred_acquire_cb;
git_remote_set_callbacks(remote, &callbacks);
result = git_remote_fetch(remote);
}
return result;
}

int cred_acquire_cb(git_cred **out,
const char * url,
const char * username_from_url,
unsigned int allowed_types,
void * payload)
{
return git_cred_ssh_key_new(out, "GITHUBUSERNAME", "/Users/admin/.ssh/id_rsa.pub", "/Users/admin/.ssh/id_rsa", "PASSPHRASE");
}

Cela crée les informations d'identification, mais lorsque je le récupère, il échoue lors de la tentative d'authentification de la session avec libssh2. (libgit2 / src / transports / ssh.c: 302):

rc = libssh2_userauth_publickey_fromfile(
session, c->username, c->publickey,
c->privatekey, c->passphrase);

L'erreur est -18,LIBSSH2_ERROR_AUTHENTICATION_FAILED. J'ai confirmé que la clé publique est ajoutée à Github et essayé de la remplacer par une nouvelle. De plus, la phrase secrète est correcte et le nom d'utilisateur est mon nom d'utilisateur github. :

[remote "origin"]
url = git@github.com:ORGNAME/REPONAME.git
fetch = +refs/heads/*:refs/remotes/origin/*

J'ai également essayé d'obtenir la clé de git-agent sous OSX avec le même résultat:

return git_cred_ssh_key_from_agent(out, "GITHUBUSERNAME");

Enfin, j'ai essayé d'utiliser l'authentification en texte brut:

return git_cred_userpass_plaintext_new(out, username, password);

Cette dernière méthode fonctionne après avoir changé le repoURL à l'adresse HTTPS. Le problème est qu’il faut que l’utilisateur saisisse le mot de passe à chaque fois ou stocke la structure git_cred qui contient le mot de passe en blanc (ne ressemble pas à ça).

Quelqu'un sait pourquoi l'authentification SSH échoue? Existe-t-il un moyen d’éviter de saisir le nom d’utilisateur / mot de passe à chaque opération (avec l’authentification en texte brut)?

Réponses:

7 pour la réponse № 1

L’utilisateur qui parle ssh est "git" (ainsi toutes les URL sont git@github.com:user/repo), vous devriez donc utiliser cela à la place du "vrai" nom d'utilisateur sur GitHub. La clé que vous envoyez est ce que le serveur utilise pour déterminer l’utilisateur auquel il s’adresse.