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