使用libssh链接期间未定义的符号

我使用libssh来完成两个系统之间的连接,ssh服务器是redhat,客户端是CentOS。

我的代码编译和链接就好了,除了在运行时我一直看到这个,

[1] libssh 0.5.5 (c) 2003-2010 Aris Adamantiadis (aris@0xbadc0de.be) Distributed under the LGPL, please refer to COPYING file for information about your rights, using threading threads_noop [2] Nonblocking connection socket: 4 [2] Socket connecting, now waiting for the callbacks to work [1] Socket connection callback: 1 (0) [1] SSH server banner: SSH-2.0-OpenSSH_5.3 [1] Analyzing banner: SSH-2.0-OpenSSH_5.3 [1] We are talking to an OpenSSH client version: 5.3 (50300) [2] Received SSH_KEXDH_REPLY [2] SSH_MSG_NEWKEYS sent [2] Received SSH_MSG_NEWKEYS ./sshclient: symbol lookup error: ./sshclient: undefined symbol: ssh_pki_import_privkey_file 

代码看起来像这样,

 int main() { ssh_session my_ssh_session; ssh_key *pubkey,*privkey; int verbosity = SSH_LOG_PROTOCOL; int port = 5022,rc; char username[20]; strcpy(username,"yoda"); //assigned a user name my_ssh_session = ssh_new(); if (my_ssh_session == NULL) exit(-1); ssh_options_set(my_ssh_session, SSH_OPTIONS_HOST, "XX.XX.XX.XX"); ssh_options_set(my_ssh_session, SSH_OPTIONS_LOG_VERBOSITY, &verbosity); ssh_options_set(my_ssh_session, SSH_OPTIONS_PORT, &port); ssh_options_set(my_ssh_session, SSH_OPTIONS_USER, username); rc = ssh_connect(my_ssh_session); if(rc != SSH_OK){ fprintf(stderr, "Error connecting to host: %s\n",ssh_get_error(my_ssh_session)); exit(-1); } rc = ssh_pki_import_privkey_file("/home/yoda/keys/id_rsa",NULL,NULL,NULL,privkey); if(rc != SSH_OK){ fprintf(stderr, "Custom Message: Private Key unacceptable.\n"); exit(-1); } fprintf(stdout, "Custom Message: Here now.\n"); rc = ssh_userauth_publickey(my_ssh_session, NULL, *privkey); if(rc == SSH_AUTH_ERROR){ fprintf(stderr, "Custom Message: A serious error has occured during authentication.\n"); exit(-1); } if(rc == SSH_AUTH_DENIED){ fprintf(stderr, "Custom Message: Unacceptable key or method.\n"); exit(-1); } if(rc == SSH_AUTH_PARTIAL){ fprintf(stderr, "Custom Message: Partially authenticated user.\n"); exit(-1); } ssh_key_free(*pubkey); ssh_key_free(*privkey); ssh_disconnect(my_ssh_session); ssh_free(my_ssh_session); return(0); } 

我知道这段代码存在很多问题但是在这一点上,我第一次尝试使用这个库,并且更关心它是如何工作的。 任何有关最新情况的见解将不胜感激。

libssh 0.5没有维护。 你应该使用libssh 0.6。 如果我没记错的话,ssh_pki_import_privkey_file()仅适用于libssh 0.6 …