QSsh是從Qt-Creator裏面提取的ssh協議的鏈接和shell命令執行。最近項目須要本身鏈接ssh服務器,進行shell輸出捕獲和自動迴應。html
簡單說下個人使用:git
單獨提取的地址:https://github.com/dushibaiyu/QSsh (更新到最新qt-creator裏的。)github
首先說下QSsh流程,首先鏈接:shell
新建SshConnectionParameters對象,初始化鏈接信息。這個類很簡單,看下就懂了、、服務器
其次就是鏈接:SshConnection類,新建時必須指定鏈接信息、、、調用connectToHost()函數去鏈接,鏈接成功發送connected()信號。ssh
斷開鏈接是:disconnectFromHost()函數,也會發送信號的、、函數
真正處理交互的是SshRemoteProcessRunner類和SshRemoteProcess類、、、sftp和ssh隧道的類項目沒用到也沒怎麼看,能夠本身研究下、、指針
先說SshRemoteProcessRunner類,這個類是爲執行單挑或者單串命令準備的、、期間交互比較麻煩、、、htm
SshRemoteProcess類是很強大的類,可是他的構造函數倒是私有的、、不能直接定義的、、只有經過SshConnection類的createRemoteProcess(const QByteArray &command)函數或者createRemoteShell()來獲得指向他的智能指針。對象
經過createRemoteProcess(const QByteArray &command)函數生成的和SshRemoteProcessRunner類執行單條命令相似,執行完馬上退出的、、你能夠經過信號捕獲輸出的結果、、、
最強大的是createRemoteShell()獲得的SshRemoteProcess對象,其直接就是一個shell、、、相似putty的那樣的,功能一點也不如弱的,二級命令,ssh跳板都支持的、、、經過readyReadStandardOutput()信號,得知服務端有輸出,經過readAllStandardOutput()獲得shell輸出的內容、、、SshRemoteProcess是繼承QIODevice的,當初找不到怎麼向遠程shell發送命令,最後竟然是經過write(…)函數、、、千萬注意,命令後面別忘跟着換行符(博主傻瓜,由於這個細節失誤研究了兩天)、、、
操做sftp的 SftpChannel類和TCP隧道的SshDirectTcpIpTunnel類和SshRemoteProcess同樣的,一樣不能直接定義的都須要經過SshConnection類的函數來生成,返回只能指針、、而這兩個類我在項目中沒用到,也就沒本身看就研究其餘項目中的難點了、、
在QSsh項目的github中裏面有Qt-creator官方的例子,和提取做者的一個sftp的例子,我也加了個ssh shell的例子、、若是您在項目中使用了QSsh,歡迎一塊兒探討、、您能夠留言或者給我郵件、、、
Ps:沒有邏輯,寫的不好、、、、大牛們輕噴、、、
個人博客地址:http://www.dushibaiyu.com
但願你們給點點擊、、