我试图使用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

在搜索了库的源代码及其文档之后,我没有发现任何与这种“缺乏”加密上下文相关的东西可以帮助解决这个问题。
下面是我要执行的代码(它是函数的一部分;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()之前。

关于c - libssh:调用ssh_is_host_known,无需加密上下文,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40267037/

10-10 13:05