libssh:ssh_is_host_known 在没有加密上下文的情况下调用

libssh: ssh_is_host_known called without cryptographic context

我试图使用 libssh 0.7.0 将 SSH 通信包含到我的程序中。我按照教程创建了到远程计算机的简单连接,但遇到了这个错误:

[2016/10/26 16:38:56.280261, 1] ssh_is_server_known:  ssh_is_host_known called without cryptographic context

搜索库的源代码及其文档后,我没有找到任何与此 "lack" 密码上下文相关的内容,可以帮助解决问题。

这是我要执行的代码(它是函数的一部分;IP 地址和用户不是实际的):

ssh_session session;
int verbosity = SSH_LOG_PROTOCOL;
int port = 22;
int state;

ssh_init();

session = ssh_new();
if (session == NULL){
    printf("Failed to create SSH session\n"); return NULL;
}

ssh_options_set(session, SSH_OPTIONS_HOST, "111.111.111.111");
ssh_options_set(session, SSH_OPTIONS_USER, "user");
ssh_options_set(session, SSH_OPTIONS_LOG_VERBOSITY, &verbosity);
ssh_options_set(session, SSH_OPTIONS_PORT, &port);

state = ssh_is_server_known(session);
if(state != SSH_SERVER_KNOWN_OK){
    printf("SSH Server is not known\n");
}

(我试图在不调用 ssh_init() 的情况下执行此部分,但两种情况均发生错误)。

根据tour (tutorial) on official page,您需要先连接到服务器,然后再验证服务器是否已知(服务器需要向您发送其主机密钥)。因此加一个

rc = ssh_connect(my_ssh_session);
if (rc != SSH_OK)
{
    fprintf(stderr, "Error connecting to localhost: %s\n",
            ssh_get_error(my_ssh_session));
    exit(-1);
}

检查前ssh_is_server_known()