首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SFTP libssh故障

SFTP libssh故障
EN

Stack Overflow用户
提问于 2016-11-11 18:57:46
回答 1查看 1.4K关注 0票数 0

我正在使用libssh库并尝试创建一个新的SFTP会话。我一直收到一条错误消息

ssh_packet_unimplemented:接收到的SSH_MSG_UNIMPLEMENTED (序列号3)

我检查了远程服务器的syslog并发现了错误。

dispatch_protocol_error:类型90 seq 3 preauth

由于某些原因,我在尝试使用以下内容时会出现此错误(取自libssh医生)

代码语言:javascript
复制
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:

我使用以下代码连接到服务器,

代码语言:javascript
复制
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);

我被教程弄糊涂了。我可能没有编写正确连接到服务器的代码。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-11 22:58:17

根据本教程的说法,在连接到服务器之后,您应该对服务器进行身份验证。也就是说,如果您想使用公钥进行身份验证,请在成功调用ssh_connect之后添加以下内容

代码语言:javascript
复制
int rc;
// ...
rc = ssh_userauth_publickey(my_ssh_session, NULL, pKey);
if(rc != SSH_AUTH_SUCCESS) {
    // error
} else {
    // all good, start SFTP/shell/etc
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40554460

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档