我試圖做一個非常簡單的git克隆與libgit2在網絡上使用SSH - 獲取過程中的標題中的錯誤。我不知道我在做什麼錯 - 這不是網絡問題,因爲我可以通過命令行克隆回購。鍵也在指定的路徑中。Libgit2 - 無法驗證SSH會話:無法打開公鑰文件
此外,密鑰已經設置,如果我想ssh到機器我想克隆我只需要提供一個密碼,所以不知道爲什麼我需要重新定義它在這裏。
#include <git2.h>
#include <iostream>
// Callback function
int cred_cb(git_cred **out, const char *url, const char *username_from_url,
unsigned int allowed_types, void *payload) {
// https://libgit2.github.com/libgit2/#HEAD/group/cred/git_cred_ssh_key_new
return git_cred_ssh_key_new(out, "username",
"~/.ssh/id_rsa.pub", "~/.ssh/id_rsa", "password");
}
int main() {
// Start up libgit2
git_libgit2_init();
// Test clone setup
git_repository *repo = NULL;
const char *url = "ssh://[email protected]/home/git_repo_to_clone";
const char *path = "tmp";
// Test clone
git_clone_options clone_opts = GIT_CLONE_OPTIONS_INIT;
clone_opts.fetch_opts.callbacks.credentials = cred_cb;
int error = git_clone(&repo, url, path, &clone_opts);
// Prints the last error message
std::cout << giterr_last()->message << std::endl;
// Clean up
git_libgit2_shutdown();
return 0;
}
印刷allowed_types
在cred_cb
說22
,所以如果你試圖返回不同類型的git_cred(例如,git_cred_userpass_plaintext
)圖書館抱怨callback returned unsupported credentials type
,也沒有指定的回調(通過調用git_clone
與NULL
作爲第三個參數),那麼它就表示authentication required but no callback set
。我可能會漏掉一些明顯的東西,我會很感激任何幫助,謝謝。
編輯
我不是與git_cred_ssh_key_from_agent(out, "username")
嘗試,它似乎做了什麼(git的文件夾被克隆),儘管丟失的文件。雖然現在問題是它變成了cred_cb
和git_clone
之間的一個無限循環(似乎是來回調用)。