如何将libssh的SCP与ssh::session一起使用



我正在使用libsss的C 包装器( libsshpp.hpp (,我正在尝试通过提供SCP例程来调用 ssh_scp_new 它是我的ssh ::会话变量,但我会收到以下错误:

cannot convert ‘ssh::Session’ to ‘ssh_session {aka ssh_session_struct*}’ for argument ‘1’ to ‘ssh_scp_struct* ssh_scp_new(ssh_session, int, const char*)’

我能够通过完全不使用C SSH :: Sess类并进行C示例来使SCP工作,但显然这不是我首选的解决方法。查看 libsshpp.hpp 我能够找到一个 getCsession((函数,但它只是私人访问,我不确定如何使用它(或者如果是甚至是我认为是(。

这是我的示例代码:

#include <iostream>
#include <fstream>
#include <libssh/libsshpp.hpp>
int main()
{
  int port      = 22;
  int verbosity = SSH_LOG_PROTOCOL;
  ssh::Session session;
  try
  {
    session.setOption(SSH_OPTIONS_LOG_VERBOSITY, &verbosity);
    session.setOption(SSH_OPTIONS_PORT,          &port);
    session.setOption(SSH_OPTIONS_USER,          "user");
    session.setOption(SSH_OPTIONS_HOST,          "host");
    session.connect();
    if (session.isServerKnown() != SSH_SERVER_KNOWN_OK)
    {
      if (session.writeKnownhost() != SSH_OK)
      {
        std::cout << "writeKnownHost failed" << std::endl;
      }
      else
      {
        session.connect();
      }
    }
    if (session.userauthPassword("password") !=
        SSH_AUTH_SUCCESS)
    {
      std::cout << "Authentication Error" << std::endl;
    }
    ssh_scp scp;
    int     rc;
    // error cannot convert ‘ssh::Session’ to ‘ssh_session {aka ssh_session_struct*}’
    scp = ssh_scp_new(session, SSH_SCP_WRITE | SSH_SCP_RECURSIVE, ".");
  }
  catch (ssh::SshException e)
  {
    std::cout << "Error during connection : ";
    std::cout << e.getError() << std::endl;
  }
  return 0;
}

如何使用C 方法发送或接收使用libssh的文件?

谢谢!

您可以看到错误。您必须决定使用SSH :: SSH :: SHESS类或SSH_Session结构。libssh库是一个C库,它只有一个C 包装器(可能不包含像原始语言那样的所有功能(这是根据官方文档使用libssh库(当前稳定版本0.7.3(发送连接和发送文件的方法。

  1. 使用 ssh_session :(在C(-use ssh_new((创建一个SSH_Session指针。-use int ssh_connect(ssh_session session(连接。-us * int ssh_options_set(ssh_session session,enum ssh_options_e type,const void * value( *请看一下此文档http://api.libssh.org/stable/group/group __libssh_libssh__session - 添加您的控件 - 使用 ssh_scp_new(session,ssh_scp_write | ssh_scp_recursive,"。"。( - 使用 ssh_free(ssh_session session(

    免费连接
    //You can try this simple program (from official libssh tutorials)
    #include <libssh/libssh.h>
    #include <stdlib.h>
    #include <stdio.h>
    int scp_write(ssh_session session)
    {
        ssh_scp scp;
        int rc;
        scp = ssh_scp_new
            (session, SSH_SCP_WRITE | SSH_SCP_RECURSIVE, ".");
        if (scp == NULL)
        {
            fprintf(stderr, "Error allocating scp session: %sn",         ssh_get_error(session));
            return SSH_ERROR;
        }
        rc = ssh_scp_init(scp);
        if (rc != SSH_OK)
        {
            fprintf(stderr, "Error initializing scp session: %sn", ssh_get_error(session));
            ssh_scp_free(scp);
            return rc;
        }
        ssh_scp_close(scp);
        ssh_scp_free(scp);
        return SSH_OK;
    }
    int main(int argc, char* argv[])
        ssh_session my_ssh_session = ssh_new();
        if (my_ssh_session == NULL)
            return 1;
        scp_write(my_ssh_session );
        ssh_free(my_ssh_session);
        return 0;
    }     
    
  2. 使用 ssh :: Session (在C (嗯,没有包装器允许此允许此功能:(。

这是使用libsss库的一些有用示例。希望能帮助到你 !http://api.libssh.org/master/libssh_tutorial.html

相关内容

  • 没有找到相关文章

最新更新