c++ libssh公钥身份验证失败:PUBLICKEY_ACCEPTED_TYPES配置选项不允许使用密钥算法“ssh-rsa”

x8goxv8g  于 2023-07-01  发布在  其他
关注(0)|答案(1)|浏览(197)

我使用libssh连接到一个运行debian 8.11和OpenSSH_6.7p1的远程主机。主机有我的RSA公钥。
我可以通过命令行连接到远程主机。但是,使用libssh连接到虚拟机会失败,并给出以下错误:

"Public key authentication failed: The key algorithm 'ssh-rsa' is not allowed to be used by PUBLICKEY_ACCEPTED_TYPES configuration option"

这就是它失败的地方:

static ssh_session start_session(const char* host, const char* user, const char* keyfile, const char* port) {
ssh_session session = ssh_new();
if (session == NULL) {
    fprintf(stderr, "Error creating SSH session\n");
    exit(EXIT_FAILURE);
}

ssh_options_set(session, SSH_OPTIONS_HOST, host);
ssh_options_set(session, SSH_OPTIONS_USER, user);
ssh_options_set(session, SSH_OPTIONS_PORT_STR, port);

int rc = ssh_connect(session);
if (rc != SSH_OK) {
    fprintf(stderr, "Error connecting to virtual machine: %s\n", ssh_get_error(session));
    ssh_free(session);
    exit(EXIT_FAILURE);
}

rc = auth_keyfile(session, keyfile);
if (rc != SSH_AUTH_SUCCESS) {
    fprintf(stderr, "Error authenticating with virtual machine\n");
    ssh_disconnect(session);
    ssh_free(session);
    exit(EXIT_FAILURE);
}

return session;

}
我已经尝试更新ssh版本,但仍然失败。什么可能导致此问题?

bvpmtnay

bvpmtnay1#

ssh-rsa算法现在已经被弃用了。您仍然可以使用这些密钥,但上使用的协议将改为rsa-sha2-256rsa-sha2-512
从错误消息中可以看出,libssh在默认情况下不再启用ssh-rsa作为密钥交换算法(原则上这是一件好事)。您可以通过ssh_options_set()将SSH_OPTIONS_PUBLICKEY_ACCEPTED_TYPES ssh选项设置为包含ssh-rsa的字符串来显式地重新启用它。
例如:

ssh_options_set(session, SSH_OPTIONS_PUBLICKEY_ACCEPTED_TYPES, "rsa-sha2-256,rsa-sha2-512,ecdh-sha2-nistp256,ssh-rsa");

(This列表仍然包含其他合理的算法,以防您与其他SSH服务器进行对话,因为如果您 * 仅 * 激活ssh-rsa支持而不支持新算法,则新的SSH服务器实际上会拒绝连接。)
ssh-rsa被弃用是有原因的,因为它使用了不安全的SHA-1哈希算法。如果你需要连接到一个运行OpenSSL 7.2之前版本的旧系统(当rsa-sha2-*算法被引入时),那么ssh-rsa是你可以对这样的系统进行公钥身份验证的唯一方法,所以你没有太多的选择。
理想情况下,您应该将Debian机器升级到仍然受支持的Debian版本,因为较新的Debian版本附带较新的OpenSSH版本,并且这些版本确实支持较新的算法。

相关问题