博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
QSsh之SshConnection类
阅读量:6768 次
发布时间:2019-06-26

本文共 2960 字,大约阅读时间需要 9 分钟。

hot3.png

SshConnection

#include”sshconnection.h”       所在的头文件

类:SshConnectionParameters:

连接需要的信息类。包含需要连接的主机和验证信息。

enum AuthenticationType 验证方式

{AuthenticationByPassword, 密码验证

AuthenticationByKey}; key文件验证

公有函数:

SshConnectionParameters() 构造函数。

属性:

QString host; 主机,主机名或者主机地址

QString userName; 用户名

QString password; 密码

QString privateKeyFile; 密匙文件。(文件地址)

int timeout; // In seconds. 连接等待时间,超过时间就自动返回连接超时,单位秒(s)

AuthenticationType authenticationType; 验证方式

quint16 port;

SshConnectionOptions options; 连接设置

SshConnectionOption枚举

enum SshConnectionOption {

SshIgnoreDefaultProxy = 0×1,  忽略默认代理?

SshEnableStrictConformanceChecks = 0×2

};

 

Q_DECLARE_FLAGS(SshConnectionOptions, SshConnectionOption)

 

 

 

类:SshConnectionInfo

连接信息类。

公有函数:

SshConnectionInfo() : localPort(0), peerPort(0) {}   构造函数

SshConnectionInfo(const QHostAddress &la, quint16 lp, const QHostAddress &pa, quint16 pp)

: localAddress(la), localPort(lp), peerAddress(pa), peerPort(pp) {} 构造函数

 

QHostAddress localAddress; 本地IP地址

quint16 localPort; 本地端口

QHostAddress peerAddress; 目标地址

quint16 peerPort; 目标地址

 

 

类:SshConnection

连接到服务器的类。下面打开和执行命令,ssh socket通道,sftp面板都需要此类。

 

enum State{Unconnected,Connecting,Connected}; 连接状态枚举{未连接,连接中,已连接}

公共函数:

explicit SshConnection(const SshConnectionParameters &serverInfo, QObject *parent = 0); 构造函数,参数是连接所需的信息类,和父对象。

 

void connectToHost(); 连接到服务器(异步)

void disconnectFromHost(); 从服务器断开连接

State state() const; 返回当前连接的状态

SshError errorState() const; 返回当前连接的错误

QString errorString() const; 返回当前连接错误的文本信息

SshConnectionParameters connectionParameters() const;  返回所用的连接信息类

SshConnectionInfo connectionInfo() const;  返回当前的连接信息

~SshConnection(); 析构函数

 

QSharedPointer<SshRemoteProcess> createRemoteProcess(const QByteArray &command); 创建一个命令执行过程呢,参数是需要执行的命令。命令执行完即退出,返回参数为SshRemoteProcess(远程进程类)的智能指针。

QSharedPointer<SshRemoteProcess> createRemoteShell(); 创建一个shell,返回的也是shRemoteProcess(远程进程类)的智能指针。这个可以保持状态,多次执行命令。Ssh跳板也是支持的,合理设计实现自动交互。

QSharedPointer<SftpChannel> createSftpChannel();  创建一个sftp面板,返回的是SftpChannel(sftp面板类)的智能指针

QSharedPointer<SshDirectTcpIpTunnel> createTunnel(quint16 remotePort); 创建一个ssh隧道,返回的是SshDirectTcpIpTunnel的智能指针。(这个类可以实现ssh的scoket代理。),参数是本地监听端口。

 

// -1 if an error occurred, number of channels closed otherwise.

int closeAllChannels(); //关闭所有通道数,正常返回通道数,错误返回-1

 

int channelCount() const;  通道数

 

发出的信号;

void connected(); 以连接到服务器

void disconnected(); 已从服务器断开连接

void dataAvailable(const QString &message); (有数据可用?)

void error(QSsh::SshError); 连接错误

 

 

 

Ssherro枚举:

enum SshError {

SshNoError, 没有错误

SshSocketError,  scoket错误

SshTimeoutError,  连接超时

SshProtocolError,

SshHostKeyError,  密码错误

SshKeyFileError, key验证错误

SshAuthenticationError,

SshClosedByServerError,

SshInternalError

};

 

 

注:QSSH是提取自Qt-creator里的一个ssh链接库,用botan库实现的加密,用qt框架的实现的ssh链接库。

这是官方留下的接口,官方的封装模式大概是(我从源码看的,Qt库源码我未读过,不清楚):

留出api类逻辑处理和运算单独存在一个private类里,api类里私有对象有一个private类,api里只是为了简洁的接口,隐藏细节的一个中间。话说,这个接口就够我们用的了。

此为我在使用中得到的一些参数和用法,非官方文档,有错误的地方请大家指正,还有的拿不准的就在后面加了个?号。

QSsh地址:

我Blog:

本文地址:

转载于:https://my.oschina.net/dushibaiyu/blog/190835

你可能感兴趣的文章