libssh C++封装(一)

1 概述

  libssh是一个在客户端和服务器端实现SSHv2协议的多平台C库。使用libssh,您可以远程执行程序、传输文件、使用安全透明的隧道、管理公钥等等。本文描述的对libssh客户端功能的C++封装。
libssh下载地址

2 设计

2.1 类图

类图

类型说明:

  • Session SSH连接会话管理类。
  • Channel SSH的通道类型。
  • Scp 基于SCP协议的文件操作。
  • SFtp 基于SFTP协议的文件操作。
  • Dir 目录功能
  • File 文件功能
  • FileInfo 文件信息功能。

2.2 模块

按类型划分7个模块

2.2.1 Session

Session类型管理SSH连接会话,后续类型都依赖该类型。

接口函数:

  • set_host 设置主机地址
  • set_port 设置端口
  • set_user 设置用户名
  • connect 连接远程主机
  • disconnect 从远程主机断开
  • verify 验证
  • auth_method 认证方法
  • login 通过密码登录
  • login_by_interactive 交互登录
  • login_by_prikey 通过私钥登录
  • login_by_pubkey 通过公钥登录
  • error 返回错误信息

文件列表:

  • session.h
  • session.cpp

2.2.2 Channel

Channel是SSH隧道功能,可以执行远程程序,运行远程Shell和读取远程文件。

接口函数:

  • open 打开隧道
  • close 关闭隧道
  • send_eof 发送结束标志
  • run_shell 运行shell功能
  • is_open 是否打开
  • is_eof 是否结束
  • shell_size 设置shell的行数和列数
  • exec 执行远程命令
  • poll 检测是否有要读取的数据
  • set_blocking 设置阻塞
  • read 从隧道读取数据
  • read_nonblocking 非阻塞方式下从从隧道读取数据
  • write 向隧道写数据

文件列表:

  • channel.h
  • channel.cpp

2.2.3 Scp

Scp类型通过SCP协议管理远程文件(通过Dir和File类型来管理)。一般建议使用SFTP协议,只有在服务端不支持SFTP协议情况下使用该协议。

接口函数:

  • open 以只读或只写模式打开文件
  • close 关闭文件
  • pull_req 拉取请求
  • get_size 获取文件大小
  • get_filename 获取文件名
  • get_permissions 获取访问权限
  • get_warning 获取警告信息
  • accept_req 接收请求
  • deny_req 拒绝请求
  • read 读数据
  • set_blocking 设置阻塞模式
  • mkdir 创建目录
  • leave_dir 离开目录
  • mkfile 创建文件
  • write 写数据
  • home 返回home目录对象
  • root 返回root目录对象
  • dir 返回指定目录对象

文件列表:

  • scp.h
  • scp.cpp

2.2.4 SFtp

SFtp类型基于SFTP协议管理远程文件(通过Dir和File类型来管理)。

接口函数:

  • init 初始化
  • extension_count 扩展数量
  • extension_name 扩展名称
  • extension_data 扩展数据
  • mkdir 创建目录
  • home 返回home目录对象
  • root 返回root目录对象
  • dir 返回指定目录对象
  • error 返回错误信息

文件列表:

  • sftp.h
  • sftp.cpp

2.2.5 Dir

Dir类型管理远程路径。

接口函数:

  • is_root 是否root目录
  • dirname 返回路径名称
  • fileinfos 返回该目录文件列表
  • mkdir 创建目录
  • rmdir 删除目录
  • mkfile 创建文件
  • rmfile 删除文件
  • rename 文件目录改名
  • chmod 修改文件权限
  • dirname 获取文件目录名
  • basename 获取文件基本名称

文件列表:

  • dir.h
  • dir.cpp

2.2.6 File

File类型可以读写远程文件。

接口函数:

  • set_filesize 设置文件大小
  • open 打开文件
  • close 关闭文件
  • set_noblocking 设置非阻塞模式
  • read 读数据
  • write 写数据
  • seek 这只文件读写位置
  • tell 返回文件读写位置
  • rewind 重置文件读写位置

文件列表:

  • file.h
  • file.cpp

2.2.7 FileInfo

FileInfo类型返回远程文件或目录信息。

接口函数:

  • is_null 是否为空
  • is_dir 是否是目录
  • is_file 是否是文件
  • is_symlink 是否是系统链接
  • is_parent 是否是父路径
  • other_is_only_read
  • name 获取文件名
  • basename 获取基本名称
  • suffix 获取扩展名
  • owner 获取拥有者
  • group 获取组名称
  • longname 获取长文件名
  • uid 获取用户id
  • gid 获取组id
  • permissions 获取访问权限
  • time 获取时间
  • size 获取文件大小

文件列表:

  • fileinfo.h
  • fileinfo.cpp

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/1668.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Centos7 的 Open Stack T 版搭建流程 --- (三)配置消息队列

配置消息队列 文章目录 配置消息队列(1)安装 RabbitMQ 服务并配置新用户权限controller (2)如何开启图形化(拓展) (1)安装 RabbitMQ 服务并配置新用户权限 controller yum install…

开源AI智能名片源码:虚实融合引领品牌营销新篇章

随着数字时代的飞速发展,品牌营销已经步入了一个全新的纪元。在这个变革的时代,开源AI智能名片源码以其独特的虚实融合功能,正引领着品牌营销走向更加智能化、个性化的道路。 传统的品牌营销往往局限于单向的信息传播,难以与用户产…

成都污水处理站运维厂家服务商

选择污水处理运维服务厂家时,需要考虑以下几个关键的事项来确保您选择了合适的服务提供商: 1. **资质和认证:** 确认厂家是否具备国家或地方政府颁发的相关环保和水处理行业资质、证书,比如ISO认证、水污染治理资质等,…

Nacos服务注册中心的下载与使用

1. Nacos是什么? https://nacos.io/ 官方:一个更易于构建云原生应用的动态服务发现(Nacos Discovery )、服务配置(Nacos Config)和服务管理平台。 集 注册中心配置中心服务管理 平台 Nacos 的关键特性包括: 服务发现和服务健康监测 动态配置服务 动…

手写一个Spring IOC框架

目录 一,Spring IOC 二,流程图设计 三,设计思路解析 三,开始写代码 1.准备工作: 2.扫描并加载类信息 3.初始化bean 4.测试一下 一,Spring IOC Spring IoC容器是Spring框架的核心,它通过读取配置信息…

【每日刷题】Day20

【每日刷题】Day20 🥕个人主页:开敲🍉 🔥所属专栏:每日刷题🍍 🌼文章目录🌼 1. 面试题 17.04. 消失的数字 - 力扣(LeetCode) 2. 189. 轮转数组 - 力扣&#…

随机森林(Random Forests)

通过5个条件判定一件事情是否会发生,5个条件对这件事情是否发生的影响力不同,计算每个条件对这件事情发生的影响力多大,写一个随机森林(Random Forests)模型程序,最后打印5个条件分别的影响力。 ChatGPT 下面是一个使…

后端获取请求体Body,将请求体进行解密放回Request请求,并能通过@RequestBody获取

目前系统发送的post和put请求都是没有加密数据。客户需要将请求体加密。而系统已经基本开发完成,不可能一个一个去修改发送的请求。就需要在发送请求时候在拦截器中将body进行加密。并且在后端进行请求过滤解密,并且能通过RequestBody继续获取对象。 1.…

matlab学习004-使用matlab绘制两个序列及信号的卷积波形图

目录 1,序列:x(n)u(n-2)-u(n-10),h(n)((0.9)^n)*u(n) 1)前期基础 ①conv函数 ②离散单位阶跃信号 2)波形图 3)代码 ①使用input方法 ②代码改进【推荐使用】 2,信号:xu(…

C语言趣味代码(二)

1.珠玑妙算 1.1 介绍 《珠玑妙算》(Mastermind)是英国Invicta公司于1973年开始销售的一款益智游戏,据说迄今为止已经在全世界销售了5000万套。《珠玑妙算》于1974年获奖后,在1975年传入美国,1976年leslieH.Autl博士甚至还出版了一本名为The…

去雾笔记01-SRKTDN: Applying Super Resolution Method to Dehazing Task

文章目录 Abstract1. Introduction2. Related Work3. Method3.1. Network Architecture Abstract 们提出了一种结合超分辨方法和知识转移方法的模型。我们的模型由一个教师网络、一个去雾网络和一个超分辨率网络组成。 1. Introduction ECNU KT团队提出了一个知识蒸馏[20]模…

智慧养老平台|基于SprinBoot+vue的智慧养老平台系统(源码+数据库+文档)

智慧养老平台目录 基于SprinBootvue的外贸平台系统 一、前言 二、系统设计 三、系统功能设计 前台 后台 管理员功能 老人功能 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取: 博主介绍:✌️大厂码农…

控制台程序设置

该篇博客主要是对下一篇博客《贪吃蛇游戏》的设计做铺垫,大家可以持续关注(点个关注哦😊)等待更新,以下是个人主页: 敲上瘾-CSDN博客 在我们写的程序运行起来后弹出的框就是控制台程序。而这个窗口我们是可以对它进行设置的&…

终于找到恢复照片的绝佳方法了!手机照片恢复的看这里!

当今手机已经彻底离不开我们的生活,手机里面的数据也成为了我们高质量生活的重要构成,当手机内存爆满,我们就不得不采用清除部分手机数据的方法来释放空间。有一些数据删除后往往才发现还另有用处,比如手机里存储着的大量照片。 …

帆软报表实现通过js查询数据库设置表格数据

最近做的一直在做报表相关的需求,自己也是一边学一边做。有一个有意思的需求是在表格中某个单元格在编辑完以后其它的表格中的数据自动填充,当也是根据一定的规则与数据来源才能填充的。 先来点基础概念,就是帆软给我们提供了这个编辑后的事件…

学习笔记:Vue2高级篇

Vue2 学习笔记:Vue2基础篇_ljtxy.love的博客-CSDN博客学习笔记:Vue2中级篇_ljtxy.love的博客-CSDN博客学习笔记:Vue2高级篇_ljtxy.love的博客-CSDN博客 Vue3 学习笔记:Vue3_ljtxy.love的博客)-CSDN博客 文章目录 7.…

《Spring》系列文章目录

Spring Framework是一个为基于Java的现代企业应用程序提供全面编程和配置模型的开源框架。它集成了控制反转(IOC)、依赖注入(DI)和面向切面编程(AOP)等容器技术。Spring框架的设计理念是面向Bean编程&#…

现代图形API综合比较:Vulkan | DirectX | Metal | WebGPU

Vulkan、DirectX、Metal 和 WebGPU 等低级图形 API 正在融合为类似于当前 GPU 构建方式的模型。 图形处理单元 (GPU) 是异步计算单元,可以处理大量数据,例如复杂的网格几何形状、图像纹理、输出帧缓冲区、变换矩阵或你想要计算的任何数据。 NSDT工具推荐…

早期javeweb技术 JSP JDBC JSTJ Servlet BooStrap

你好,我是Qiuner. 为记录自己编程学习过程和帮助别人少走弯路而写博客 这是我的 github gitee 如果本篇文章帮到了你 不妨点个赞吧~ 我会很高兴的 😄 (^ ~ ^) 想看更多 那就点个关注吧 我会尽力带来有趣的内容 jar包放在web-web-inf中 Boot strap框架 container是两…

【Go语言快速上手(三)】数组, 切片与映射

💓博主CSDN主页:杭电码农-NEO💓   ⏩专栏分类:Go语言专栏⏪   🚚代码仓库:NEO的学习日记🚚   🌹关注我🫵带你学习更多Go语言知识   🔝🔝 GO快速上手 1. 前言2. 数组详解3. 切…