我使用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版本,但仍然失败。什么可能导致此问题?
1条答案
按热度按时间bvpmtnay1#
ssh-rsa
算法现在已经被弃用了。您仍然可以使用这些密钥,但上使用的协议将改为rsa-sha2-256
或rsa-sha2-512
。从错误消息中可以看出,libssh在默认情况下不再启用
ssh-rsa
作为密钥交换算法(原则上这是一件好事)。您可以通过ssh_options_set()将SSH_OPTIONS_PUBLICKEY_ACCEPTED_TYPES
ssh选项设置为包含ssh-rsa
的字符串来显式地重新启用它。例如:
(This列表仍然包含其他合理的算法,以防您与其他SSH服务器进行对话,因为如果您 * 仅 * 激活
ssh-rsa
支持而不支持新算法,则新的SSH服务器实际上会拒绝连接。)ssh-rsa
被弃用是有原因的,因为它使用了不安全的SHA-1哈希算法。如果你需要连接到一个运行OpenSSL 7.2之前版本的旧系统(当rsa-sha2-*
算法被引入时),那么ssh-rsa
是你可以对这样的系统进行公钥身份验证的唯一方法,所以你没有太多的选择。理想情况下,您应该将Debian机器升级到仍然受支持的Debian版本,因为较新的Debian版本附带较新的OpenSSH版本,并且这些版本确实支持较新的算法。