#include”sshconnection.h” 所在的头文件html
链接须要的信息类。包含须要链接的主机和验证信息。git
enum AuthenticationType 验证方式github
{AuthenticationByPassword, 密码验证shell
AuthenticationByKey}; key文件验证api
公有函数:服务器
SshConnectionParameters() 构造函数。框架
属性:ssh
QString host; 主机,主机名或者主机地址异步
QString userName; 用户名socket
QString password; 密码
QString privateKeyFile; 密匙文件。(文件地址)
int timeout; // In seconds. 链接等待时间,超过期间就自动返回链接超时,单位秒(s)
AuthenticationType authenticationType; 验证方式
quint16 port;
SshConnectionOptions options; 链接设置
enum SshConnectionOption {
SshIgnoreDefaultProxy = 0×1, 忽略默认代理?
SshEnableStrictConformanceChecks = 0×2
};
Q_DECLARE_FLAGS(SshConnectionOptions, SshConnectionOption)
链接信息类。
公有函数:
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; 目标地址
链接到服务器的类。下面打开和执行命令,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); 链接错误
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地址:http://www.oschina.net/p/qssh
https://github.com/dushibaiyu/QSsh
我Blog:http://www.dushibaiyu.com
本文地址:http://www.dushibaiyu.com/2014/01/qssh%E4%B9%8Bsshconnection%E7%B1%BB.html