我的SSH服务器使用双重身份验证。我不知道它是如何实现的。但最初它要求输入密码,然后又要求另一个密码登录到一个与通常控件不同的独立控制台。
我的代码类似于文档中显示的示例代码,
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <stdio.h>
#include <libssh/libssh.h>
int main(int argc, char * argv[])
{
ssh_session my_ssh_session = ssh_new();
int rc;
char * password;
char * username = "admin";
// Check if ssh session exists.
if(my_ssh_session == NULL)
{
exit(-1);
}
ssh_options_set(my_ssh_session, SSH_OPTIONS_HOST, "x.x.x.x");
rc = ssh_connect(my_ssh_session);
if (rc != SSH_OK)
{
fprintf(stderr, "Error Connecting to Server: %s.\n", ssh_get_error(my_ssh_session));
exit(-1);
}
password = getpass("Password: ");
rc = ssh_userauth_password(my_ssh_session, username, password);
if (rc != SSH_AUTH_SUCCESS)
{
fprintf(stderr, "ERROR Authenticating: %s.\n", ssh_get_error(my_ssh_session));
ssh_disconnect(my_ssh_session);
ssh_free(my_ssh_session);
}
else
{
printf("Authentication Successful.\n");
}
ssh_free(my_ssh_session);
}
我如何在此实现双重身份验证?你能帮助我吗?
答案 0 :(得分:0)
什么版本的 libssh 你有吗?
&#34;版本0.5.1及更高版本在处理SSH_MSG_NEWKEYS和SSH_MSG_KEXDH_REPLY包时出现逻辑错误。检测到的错误未将会话正确设置为错误状态,并进一步处理导致空指针解除引用的数据包。这是初始密钥交换后的数据包,不需要身份验证。&#34;
参考libssh