libgit2:使用 ssh 身份验证进行远程获取

问题描述

好吧,我以为这一切都会很容易。我错了。使用 libgit2,我正在尝试使用以下形式的 url 进行提取

git@github.com:owner/repo.git

我的代码

git_fetch_options fetchOptions = GIT_FETCH_OPTIONS_INIT;
fetchOptions.callbacks.credentials = creds;

int error = git_remote_fetch(origin,nullptr,&fetchOptions,nullptr);

...

int creds(git_cred **out,const char *url,const char *username,unsigned int types,void *payload) {
    cout << "Try to get credentials for " << url << "," << username << "," << types << endl;
    int rv = git_credential_ssh_key_from_agent(out,"user@somewhere.com");
    if (rv) {
        cout << "Error: " << git_error_last()->message << endl;
    }
    return rv;
}

我得到这个输出

Try to get credentials for git@github.com:jplflyer/git-dashboard.git,git,6
Got an error: username does not match prevIoUs request

如果我使用方法调用中的用户名而不是硬编码的用户名,它会一直循环而不会出错。

我不知道它是如何知道如何与密钥代理交谈或如何配置它以确保它使用来自我的 ~/.ssh 配置的 .pub 文件(它没有配置为使用 id_rsa.pub 但是而不是一个特定于 github 的)。

也许我应该使用另一种返回 SSH 密钥的方法,类似于我发现的代码

int creds(git_cred **out,const char *username_from_url,unsigned int allowed_types,void *payload) {
    return git_credential_ssh_key_new(out,username_from_url,"path_to_home/.ssh/id_rsa.pub","path_to_home/.ssh/id_rsa","password");
}

我宁愿从 ssh-agent 获取它,但也许那是不可能的。也许我只是缺少一些配置。

评论

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)