我正在尝试使用ssh_connect和libssh进行连接,但是我收到以下错误.我不知道这意味着什么.有什么想法吗?
[2014/09/30 00:53:00.015877, 2] channel_open: Creating a channel 43 with 64000 window and 32768 max packet
[2014/09/30 00:53:00.050776, 1] ssh_packet_unimplemented: Received SSH_MSG_UNIMPLEMENTED (sequence number 3)
[2014/09/30 00:54:59.949316, 1] ssh_socket_exception_callback: Socket exception callback: 1 (0)
[2014/09/30 00:54:59.949483, 1] ssh_socket_exception_callback: Socket error: disconnected
Error allocating SFTP session: Socket error: disconnected
Run Code Online (Sandbox Code Playgroud)
这是代码
** Initialises SSH Session **/
ssh_session initialise_ssh(char* host, int port) {
ssh_session my_ssh_session;
int verbosity = SSH_LOG_PROTOCOL;
my_ssh_session = ssh_new();
ssh_options_set(my_ssh_session, SSH_OPTIONS_HOST, host);
ssh_options_set(my_ssh_session, SSH_OPTIONS_LOG_VERBOSITY, &verbosity);
ssh_options_set(my_ssh_session, SSH_OPTIONS_PORT, &port);
rc = ssh_connect(current_session);
if (rc != SSH_OK)
{
fprintf(stderr, "Error connecting host: %s\n",
ssh_get_error(current_session));
return my_ssh_session;
}
Run Code Online (Sandbox Code Playgroud)
您在initialise_ssh()函数中创建的ssh_session对象尚未完全初始化,因此不能像您尝试那样直接用于创建sftp会话。它缺少一些身份验证,因此套接字在 120 秒超时后关闭,引发异常。
成功调用 ssh_connect() 后,您应该对主机进行身份验证(ssh_is_server_known() 函数等),并且必须提供一种对用户进行身份验证的方法:如果您设置了公钥登录,则 ssh_userauth_publickey_auto(my_ssh_session, NULL, NULL) 会执行此操作供运行您的应用程序的用户使用。
检查http://api.libssh.org/master/libssh_tutor_guided_tour.html中的“验证服务器”和“验证用户”
之后,您就可以使用会话来完成一些工作,在您的示例中执行一些 sftp 操作。