开发者社区> 一见蓝天> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

远程执行命令的C++实现CLibssh2

简介: CLibssh2可以帮助实现相当于Linux的ssh命令的功能。CLibssh2基于libssh2库(http://www.libssh2.org)实现,不过libssh2的使用较为复杂,而CLibssh2通过封装提供了简单的接口,即可以代码中实现远程执行命令。
+关注继续查看
CLibssh2可以帮助实现相当于Linux的ssh命令的功能。CLibssh2基于libssh2库(http://www.libssh2.org)实现,不过libssh2的使用较为复杂,而CLibssh2通过封装提供了简单的接口,即可以代码中实现远程执行命令。

头文件:https://github.com/eyjian/mooon/blob/master/common_library/include/mooon/net/libssh2.h
实现文件:https://github.com/eyjian/mooon/blob/master/common_library/src/net/libssh2.cpp
测试代码:https://github.com/eyjian/mooon/blob/master/common_library/test/net/ut_libssh2.cpp

  1. // 为非线程安全类
  2. //
  3. // 提供执行远程命令的能力,类似于ssh命令
  4. // 可配合utils::CLoginTokener一起使用:#include mooon/utils/tokener.h>
  5. //
  6. // 使用示例(执行远程命令):
  7. // try
  8. // {
  9. //     int exitcode;
  10. //     std::string exitsignal;
  11. //     std::string errmsg;
  12. //     int num_bytes;
  13. //     net::CLibssh2 libssh2(ip, port, username, password);
  14. //     libssh2.remotely_execute(command, std::cout, &exitcode, &exitsignal, &errmsg, &num_bytes);
  15. // }
  16. // catch (sys::CSyscallException& syscall_ex)
  17. // {
  18. //     fprintf(stderr, "%s\n", syscall_ex.str().c_str());
  19. // }
  20. // catch (utils::CException& ex)
  21. // {
  22. //     fprintf(stderr, "%s\n", ex.str().c_str());
  23. // }
  24. class CLibssh2
  25. {
  26. public:
  27.     // 初始化ssh2环境,为非线程安全函数,每个进程启动时调用一次
  28.     static void init() throw (utils::CException);
  29.     // 清理初始化时产生的资源,每个进程退出时调用一次,或者不再使用ssh2时调用一次
  30.     static void fini();

  31. public:
  32.     // ip 远程主机sshd服务监听的IP地址
  33.     // port 远程主机sshd服务监听的端口号
  34.     // username 用来连接远程主机的用户名
  35.     // password 用户名username的密码
  36.     // timeout_seconds 连接超时时长,单位为秒
  37.     // nonblocking 连接是否主国非阻塞方式,为true表示为非阻塞,为false表示为阻塞方式,建议采用非阻塞方式
  38.     CLibssh2(const std::string& ip, uint16_t port, const std::string& username, const std::string& password, uint32_t timeout_seconds=2, bool nonblocking=true) throw (utils::CException, sys::CSyscallException);
  39.     ~CLibssh2();

  40.     // command 被远程执行的命令,如:whoami
  41.     // out 接收命令输出的流
  42.     // exitcode 远程命令执行结束后的退出代码,如:0
  43.     // exitsignal 远程命令执行时接收到的信号,如:TERM
  44.     // num_bytes 远程命令吐出的字节数
  45.     void remotely_execute(const std::string& command, std::ostream& out, int* exitcode, std::string* exitsignal, std::string* errmsg, int* num_bytes) throw (utils::CException, sys::CSyscallException);

  46.     // 下载远端的文件到本地
  47.     // remote_filepath 被下载的远端文件
  48.     // num_bytes 远端文件的字节数
  49.     void download(const std::string& remote_filepath, std::ostream& out, int* num_bytes) throw (utils::CException, sys::CSyscallException);

  50.     // 上传本地文件到远端
  51.     // num_bytes 本地文件的字节数
  52.     void upload(const std::string& local_filepath, const std::string& remote_filepath, int* num_bytes) throw (utils::CException, sys::CSyscallException);
  53. };



版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
C++异常处理机制由浅入深, 以及函数调用汇编过程底层刨析. C++11智能指针底层模拟实现
C++异常处理机制由浅入深, 以及函数调用汇编过程底层刨析. C++11智能指针底层模拟实现
0 0
生产者消费者模式保姆级教程 (阻塞队列解除耦合性) 一文帮你从C语言版本到C++ 版本, 从理论到实现 (一文足以)
生产者消费者模式保姆级教程 (阻塞队列解除耦合性) 一文帮你从C语言版本到C++ 版本, 从理论到实现 (一文足以)
0 0
C++从面试常考实现特殊类到单例模式的实现
C++从面试常考实现特殊类到单例模式的实现
0 0
线程池设计, 从简单的我们平常设计线程池图解,到生活中的类似线程池的处理现实场景, 到简单的C++模拟nginx写的单链表组织工作队列的简单线程池实现 + nginx 部分源码刨析
线程池设计, 从简单的我们平常设计线程池图解,到生活中的类似线程池的处理现实场景, 到简单的C++模拟nginx写的单链表组织工作队列的简单线程池实现 + nginx 部分源码刨析
0 0
如何用c++实现异常处理
如何用c++实现异常处理
0 0
分块刨析从函数原型到分块实现C++STL(vector)
分块刨析从函数原型到分块实现C++STL(vector)
0 0
C++模板实现,支持多维,安全数组的完整代码
C++模板实现,支持多维,安全数组的完整代码
0 0
Kalman算法C++实现代码(编译运行通过)
Kalman算法C++实现代码(编译运行通过)
0 0
C++实现俄罗斯方块(附代码)
C++实现俄罗斯方块(附代码)
0 0
C++ 实现KMP字符串匹配算法
C++ 实现KMP字符串匹配算法
0 0
+关注
一见蓝天
擅长面向对象设计、C++程序开发,在金山和华为呆过,互联网从业十多年,有分布式计算和存储系统经验。
文章
问答
文章排行榜
最热
最新
相关电子书
更多
C++课程-对象模型
立即下载
使用C++开发PHP7扩展
立即下载
C++对象模型
立即下载