我正在使用libssh库并尝试创建新的SFTP会话。我一直收到
的错误信息ssh_packet_unimplemented:收到SSH_MSG_UNIMPLEMENTED(序列号3)
我检查了远程服务器的syslog,发现错误
dispatch_protocol_error:输入90 seq 3 [preauth]
出于某种原因,我在尝试使用以下内容时遇到此错误(取自libssh doc)
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,都会出现同样的错误。
我对我的问题进行了很多研究,但无法找到任何补救措施。任何帮助都会很棒。
修改
在Amazon EC2服务器上,我浏览了/var/log/auth.log
,发现了这个:
sshd [24860]:ubuntu
的公接密钥sshd [24860]:pam_unix(sshd:session):为用户ubuntu打开的会话(uid = 0)
sshd [24930]:dispatch_protocol_error:输入90 seq 3 [preauth]
在libssh代码中,我将SSH_OPTIONS_LOG_VERBOSITY
设置为SSH_LOG_PACKET
,一切运行顺利,但当它到达sftp_new()
时,我收到此错误并在{{1}处冻结消息,
channel_open:创建一个64000窗口,最大32768的通道43 包
packet_send2:packet:写道[len = 44,padding = 19,comp = 24,payload = 24]
channel_open:为第43频道发送了SSH_MSG_CHANNEL_OPEN类型会话
ssh_socket_unbuffered_write:启用套接字POLLOUT
ssh_packet_socket_callback:packet:读取类型3 [LEN = 12,填充= 6,排版= 5,有效载荷= 5]
ssh_packet_process:数据包类型3的调度处理程序
ssh_packet_unimplemented:收到SSH_MSG_UNIMPLEMENTED(序列 3)
EDIT2:
我使用以下代码连接到服务器,
SSH_MSG_UNIMPLEMENTED
我对tutorial感到困惑。我可能没有编写代码来正确连接到服务器。
答案 0 :(得分:2)
根据this tutorial,连接到服务器后,您应该对自己进行身份验证。即,如果您想使用公钥进行身份验证,请在成功调用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
}