我正在使用libssh库并尝试创建一个新的SFTP会话。我一直收到一条错误消息
ssh_packet_unimplemented:接收到的SSH_MSG_UNIMPLEMENTED (序列号3)
我检查了远程服务器的syslog并发现了错误。
dispatch_protocol_error:类型90 seq 3 preauth
由于某些原因,我在尝试使用以下内容时会出现此错误(取自libssh医生)
int sftp_helloworld(ssh_session session) {
sftp_session sftp;
int rc;
sftp = sftp_new(session); // Freezes at this part
if (sftp == NULL) {
fprintf(stderr, "Error allocating SFTP session: %s\n", ssh_get_error(session));
return SSH_ERROR;
}
rc = sftp_init(sftp);
if (rc != SSH_OK) {
fprintf(stderr, "Error initializing SFTP session: %s.\n", sftp_get_error(sftp));
sftp_free(sftp);
return rc;
}
sftp_free(sftp);
return SSH_OK;
}唯一起作用的是实际的ssh连接。无论是使用SCP、SFTP还是打开远程shell,都会发生相同的错误。
我对我的问题做了很多研究,但没有找到任何补救办法。任何帮助都会很好。
编辑:
在亚马逊的EC2服务器上,我查看了/var/log/auth.log并发现如下:
sshd24860:为ubuntu接受的公开密钥 sshd24860: pam_unix(sshd:pam_unix):为用户ubuntu (uid=0)打开的会话 sshd24930: dispatch_protocol_error:类型90 seq 3 preauth
在libssh代码中,我将SSH_OPTIONS_LOG_VERBOSITY设置为SSH_LOG_PACKET,一切运行都很顺利,但是当它到达sftp_new()时,我收到了这个错误,并在SSH_MSG_UNIMPLEMENTED消息处冻结了它,
channel_open:使用64000窗口和32768最大数据包创建信道43 packet_send2:数据包:写len=44,padding=19,comp=24,payload=24 channel_open:为信道43发送SSH_MSG_CHANNEL_OPEN类型会话 ssh_socket_unbuffered_write:为套接字启用POLLOUT ssh_packet_socket_callback:数据包: read type 3 len=12,padding=6,comp=5,payload=5 ssh_packet_process:对包类型3的调度处理程序 ssh_packet_unimplemented:接收到的SSH_MSG_UNIMPLEMENTED (序列号3)
EDIT2:
我使用以下代码连接到服务器,
ssh_key pKey;
int rc = ssh_pki_import_privkey_file(PC_PRIVATE_KEY_FILE, NULL, NULL, NULL, &pKey);
ssh_session my_ssh_session = ssh_new();
ssh_options_set(my_ssh_session, SSH_OPTIONS_HOST, PC_HOST);
ssh_options_set(my_ssh_session, SSH_OPTIONS_USER, PC_USER);
ssh_options_set(my_ssh_session, SSH_OPTIONS_PORT, &PC_PORT);
ssh_options_set(my_ssh_session, SSH_OPTIONS_LOG_VERBOSITY, &PC_VERBOSITY);
rc = ssh_connect(my_ssh_session);我被教程弄糊涂了。我可能没有编写正确连接到服务器的代码。
发布于 2016-11-11 22:58:17
根据本教程的说法,在连接到服务器之后,您应该对服务器进行身份验证。也就是说,如果您想使用公钥进行身份验证,请在成功调用ssh_connect之后添加以下内容
int rc;
// ...
rc = ssh_userauth_publickey(my_ssh_session, NULL, pKey);
if(rc != SSH_AUTH_SUCCESS) {
// error
} else {
// all good, start SFTP/shell/etc
}https://stackoverflow.com/questions/40554460
复制相似问题