gpt4 book ai didi

c++ - 如何将 libssh 的 SCP 与 ssh::Session 一起使用

转载 作者:太空宇宙 更新时间:2023-11-04 13:00:34 25 4
gpt4 key购买 nike

我正在使用 libssh 的 C++ 包装器 ( libsshpp.hpp ),我正在尝试调用 ssh_scp_new 通过给它我的 ssh::Session 来创建一个 SCP 程序变量,但出现以下错误:

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::Session 类并使用 C example 来让 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;
}

我如何通过 SCP 使用 C++ 方法使用 libssh 发送或接收文件?

谢谢!

最佳答案

正如您所看到的错误。您必须决定使用 ssh::Session 类还是 ssh_session 结构。 libssh 库是一个 C 库,它只有一个 C++ 包装器(可能不像原始语言那样包含所有功能)下面根据官方文档介绍如何使用libssh库(当前稳定版本0.7.3)发送连接和发送文件。

  1. 使用 ssh_session:(在 C 中)- 使用 ssh_new() 创建一个 ssh_session 指针。- 使用 int ssh_connect(ssh_session session) 进行连接。-use *int ssh_options_set ( ssh_session session, enum ssh_options_e type,const void * value )* 查看此文档 http://api.libssh.org/stable/group__libssh__session.html#ga7a801b85800baa3f4e16f5b47db0a73d- 添加您的控件- 使用 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: %s\n", ssh_get_error(session));
    return SSH_ERROR;
    }
    rc = ssh_scp_init(scp);
    if (rc != SSH_OK)
    {
    fprintf(stderr, "Error initializing scp session: %s\n", 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++ 中),目前没有包装器允许这样做:(。

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

关于c++ - 如何将 libssh 的 SCP 与 ssh::Session 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44360466/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com