SFTP libssh失败

时间:2016-11-11 18:57:46

标签: c ssh sftp libssh

我正在使用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感到困惑。我可能没有编写代码来正确连接到服务器。

1 个答案:

答案 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
}