我正在使用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(发送连接和发送文件的方法。
。使用 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; }
使用 ssh :: Session (在C (嗯,没有包装器允许此允许此功能:(。
这是使用libsss库的一些有用示例。希望能帮助到你 !http://api.libssh.org/master/libssh_tutorial.html