我正在使用libssh的C ++包装器( libsshpp.hpp )而我正试图通过给我一个SCP例程来调用 ssh_scp_new ssh::Session变量,但我收到以下错误:
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;
}
我如何使用C ++方法向libssh发送或接收文件?
谢谢!
答案 0 :(得分:0)
你可以看到错误。你必须决定使用ssh :: Session类或ssh_session结构。 libssh库是一个C库,它只有一个C ++包装器(可能不包含原始语言中的所有功能) 以下是根据官方文档使用libssh库(当前稳定版本0.7.3)发送连接和发送文件的方法。
使用 ssh_session :(在C中) -use ssh_new()创建一个ssh_session指针。 -use 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 - 加你的控件 -send文件使用 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;
}
使用 ssh :: Session (在C ++中),当前没有包装器允许这样做:(。
以下是使用libssh库的一些有用示例。希望能帮助到你 ! http://api.libssh.org/master/libssh_tutorial.html