windows和 Linux 下通過 QProcess 打開ssh 和vnc

文章目錄

  • SSH
    • SSH驗證
    • 啟動SSH
    • 一、口令登錄
    • 二、公鑰登錄
    • 通過Qprocess 啟動ssh
  • VNC Viewer簡介
    • 通過QProcess啟動vncViewer

SSH

Secure Shell(SSH) 是由 IETF(The Internet Engineering Task Force) 制定的建立在應用層基礎上的**安全網絡協議**。它是專為遠程登錄會話(**甚至可以用Windows遠程登錄Linux服務器進行文件互傳**)和其他網絡服務提供安全性的協議,可有效彌補網絡中的漏洞。通過SSH,可以把所有傳輸的數據進行加密,也能夠防止DNS欺騙和IP欺騙。還有一個額外的好處就是傳輸的數據是經過壓縮的,所以可以加快傳輸的速度。**目前已經成為Linux系統的標準配置**。

SSH的安全機制
SSH之所以能夠保證安全,原因在于它采用了非對稱加密技術(RSA)加密了所有傳輸的數據。

傳統的網絡服務程序,如FTP、Pop和Telnet其本質上都是不安全的;因為它們在網絡上用明文傳送數據、用戶帳號和用戶口令,很容易受到中間人(man-in-the-middle)攻擊方式的攻擊。就是存在另一個人或者一臺機器冒充真正的服務器接收用戶傳給服務器的數據,然后再冒充用戶把數據傳給真正的服務器。

SSH驗證

但并不是說SSH就是絕對安全的,因為它本身提供兩種級別的驗證方法:

第一種級別(基于口令的安全驗證):只要你知道自己帳號和口令,就可以登錄到遠程主機。所有傳輸的數據都會被加密,但是不能保證你正在連接的服務器就是你想連接的服務器。可能會有別的服務器在冒充真正的服務器,也就是受到“中間人攻擊”這種方式的攻擊

第二種級別(基于密鑰的安全驗證):你必須為自己創建一對密鑰,并把公鑰放在需要訪問的服務器上。如果你要連接到SSH服務器上,客戶端軟件就會向服務器發出請求,請求用你的密鑰進行安全驗證。服務器收到請求之后,先在該服務器上你的主目錄下尋找你的公鑰,然后把它和你發送過來的公鑰進行比較。如果兩個密鑰一致,服務器就用公鑰加密“質詢”(challenge)并把它發送給客戶端軟件。客戶端軟件收到“質詢”之后就可以用你的私鑰在本地解密再把它發送給服務器完成登錄。與第一種級別相比,第二種級別不僅加密所有傳輸的數據,也不需要在網絡上傳送口令,因此安全性更高,可以有效防止中間人攻擊。

啟動SSH

啟動服務器的SSH服務
首先確認ssh-server是否已經啟動了

ps -e | grep ssh

在這里插入圖片描述
如圖,sshd 表示ssh-server已經啟動了。如果沒有啟動,可以使用如下命令啟動:

sudo /etc/init.d/ssh start 

停止和重啟ssh服務的命令如下:

sudo /etc/init.d/ssh stop  #server停止ssh服務 
sudo /etc/init.d/ssh restart  #server重啟ssh服務

接下來就可以進行使用客戶機遠程登錄服務器了~
SSH兩種級別的遠程登錄

一、口令登錄

口令登錄非常簡單,只需要一條命令,命令格式為: ssh 客戶端用戶名@服務器ip地址 eg:

ssh ldz@192.168.0.1

如果需要調用圖形界面程序可以使用 -X 選項

ssh -X ldz@192.168.0.1

如果客戶機的用戶名和服務器的用戶名相同,登錄時可以省略用戶名。

ssh 192.168.0.1

還要說明的是,SSH服務的默認端口是22,也就是說,如果你不設置端口的話登錄請求會自動送到遠程主機的22端口。我們可以使用 -p 選項來修改端口號,比如連接到服務器的1234端口:

ssh -p 1234 ldz@192.168.0.1

客戶機必須要知道服務器的ip地址。可以在服務器端電腦上利用 ifconfig 命令查看該機的ip地址

如果是第一次登陸,會給出如下提示:
在這里插入圖片描述
意思是,該遠程主機的真實性無法確定,其公鑰指紋為 SHA256:FFobshqrGOachj7Xp4LsJ9+xkNBlyyOe8ZIPl7K+qQI,確定想要繼續連接嗎?

輸入yes即可。這時系統會提示遠程主機被添加到已知主機列表。
在這里插入圖片描述
然后會要求我們輸入遠程主機的密碼,輸入的密碼正確就可以成功登錄了。命令提示符會修改為遠程主機的提示符,現在開始,終端中輸入的命令都將在服務器中執行。

在這里插入圖片描述

二、公鑰登錄

每次登錄遠程主機都需要輸入密碼是很不方便的,如果想要省去這一步驟,可以利用密鑰對進行連接,還可以提高安全性。

1、在本機生成密鑰對

使用ssh-keygen命令生成密鑰對:

ssh-keygen -t rsa   #-t表示類型選項,這里采用rsa加密算法

然后根據提示一步步的按enter鍵即可(其中有一個提示是要求設置私鑰口令passphrase,不設置則為空,這里看心情吧,如果不放心私鑰的安全可以設置一下),執行結束以后會在 /home/當前用戶 目錄下生成一個 .ssh 文件夾,其中包含私鑰文件 id_rsa 和公鑰文件 id_rsa.pub。

2、將公鑰復制到遠程主機中

使用ssh-copy-id命令將公鑰復制到遠程主機。ssh-copy-id會將公鑰寫到遠程主機的 ~/ .ssh/authorized_key 文件中

ssh-copy-id ldz@192.168.0.1

經過以上兩個步驟,以后再登錄這個遠程主機就不用再輸入密碼了。

通過Qprocess 啟動ssh

原理,通過Qprocess打開cmd,通過cmd輸入指令 打開ssh

        QProcess *p = new QProcess(this);QStringList args;
#ifdef WINDOWSargs << "/C" <<"start"<<m_sshPath<<m_sshUser +"@"+ cc->m_IP;//"C:\\test\\ssh.exe"p->startDetached("cmd.exe", args);//QStringList()<<"/c"<<"start"<<"cmd"//啟動cmd
#elseargs<<"-e"<<"/usr/bin/ssh"<< m_sshUser +"@"+ cc->m_IP;p->startDetached("/usr/bin/xterm",args);
#endifint res = p->exitCode();qDebug() << "exit code = " << res<<"error"<< p->readAllStandardError();

在windows環境下,是用cmd來打開ssh,代碼執行完成后會彈出一個輸入密碼的界面,
輸入密碼驗證通過之后,就算是成功登錄了。
在Linux環境下,是通過打開xterm,通過xterm來打開ssh,并連接的。xterm是Linux下的一個終端執行程序,不同的Linux下的終端程序不一樣,他可能是xterm也可能是gnome-terminal,Konsole, Terminator,這些程序一般都是/usr/bin下面。

VNC Viewer簡介

VNC是一款開源的遠程控制軟件,功能強大且高效實用,其性能不遜色同類軟件,它的工作原理和WIN遠程控制軟件類似。

整個 VNC 一般運行的工作流程如下:

(1) VNC 客戶端通過瀏覽器或 VNC Viewer 連接至 VNC Server。

(2) VNC Server 傳送一對話窗口至客戶端,要求輸入連接密碼(可能為空),以及存取的 VNC Server 顯示裝置。

(3) 在客戶端輸入連接密碼后,VNC Server 驗證客戶端是否具有存取權限。

(4) 若是客戶端通過 VNC Server 的驗證,客戶端即要求 VNC Server 顯示桌面環境。

(5) 被控端將畫面顯示控制權交由 VNC Server 負責

vncViewer的下載和安裝

通過QProcess啟動vncViewer

        QProcess *p = new QProcess(this);QStringList args;
#ifdef WINDOWSargs << "/c" << m_vncPath<< cc->m_IP;//"D:\\Program Files\\RealVNC\\VNC Viewer\\vncviewer.exe"p->startDetached("cmd.exe",args);//QStringList()<<"/c"<<"start"<<"cmd"
#elseargs<<cc->m_IP;p->startDetached("/usr/bin/vncviewer",args);
#endifint res = p->exitCode();qDebug() << "exit code = " << res<<"error"<< p->readAllStandardError();

在widows環境下是通過啟動cmd,通過cmd來啟動的vncViewer,在Linux環境下可以直接啟動vncViewer。
參考文章1

參考文章2

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/10480.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/10480.shtml
英文地址,請注明出處:http://en.pswp.cn/web/10480.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

uniapp下拉選擇組件

uniapp下拉選擇組件 背景實現思路代碼實現配置項使用尾巴 背景 最近遇到一個這樣的需求&#xff0c;在輸入框中輸入關鍵字&#xff0c;通過接口查詢到結果之后&#xff0c;以下拉框列表形式展現供用戶選擇。查詢了下uni-app官網和項目中使用的uv-ui庫&#xff0c;沒找到符合條…

微信小程序中的圖像奧秘:圖片與Base64的華麗變身記

微信小程序中的圖像奧秘&#xff1a;圖片與Base64的華麗變身記 基本概念解析圖片與Base64的關系為何轉換 圖片轉Base64實戰微信小程序使用wx.getImageInfo獲取圖片信息圖片轉換為Base64注意 Base64轉圖片直接在小程序頁面顯示云開發環境轉換注意 遇遇問題排查思路結語引發討論 …

前端開發工程師——ajax

express框架 終端輸入 npm init --yes npm i express 請求報文/響應報文 // 1.引入express const express require(express);// 2.創建應用對象 const app express();// 3.創建路由規則 // request:是對請求報文的封裝 // response&#xff1a;是對響應報文的封裝 app.get(…

【御控物聯】Java JSON結構轉換、JSON協議轉換、JSON屬性互換(15):對象To數組——轉換映射方式

文章目錄 一、JSON結構轉換是什么&#xff1f;二、術語解釋三、案例之《JSON對象 To JSON數組》四、代碼實現五、在線轉換工具六、技術資料 一、JSON結構轉換是什么&#xff1f; JSON結構轉換指的是將一個JSON對象或JSON數組按照一定規則進行重組、篩選、映射或轉換&#xff0…

Vue3自定義封裝音頻播放組件(帶拖拽進度條)

Vue3自定義封裝音頻播放組件&#xff08;帶拖拽進度條&#xff09; 描述 該款自定義組件可作為音頻、視頻播放的進度條&#xff0c;用于控制音頻、視頻的播放進度、暫停開始、拖拽進度條拓展性極高。 實現效果 具體效果可以根據自定義內容進行位置調整 項目需求 有播放暫停…

XSS實戰漏洞挖掘

接下來一年時間將會主要研究滲透測試方向的眾多問題&#xff0c;文章中的內容也會在后面定期更新。本文主要記錄了一些XSS漏洞挖掘中的實用心得和學習筆記。 漏洞描述 漏洞描述&#xff1a;跨站腳本攻擊的英文全稱是Cross Site Script&#xff0c;為了和樣式表區分&#xff0…

python實現pip一鍵切換國內鏡像源腳本分享

本文主要分享一個自己寫的pip一鍵切換國內鏡像源python腳本 import subprocess# pip 國內鏡像源加速 source_urls [{"name": "默認鏡像源", "url": ""},{"name": "清華大學鏡像源(推薦使用)", "url": …

sqlserver數據庫日志文件log.ldf文件占用過大清除的辦法

sqlserver數據庫日志文件log.ldf文件占用過大清除的辦法 技術交流 http://idea.coderyj.com/ 1.清除數據庫日志的方法 --- 查看數據庫日志文件名 USE cs GO SELECT file_id, name,size,* FROM sys.database_files;ps 可以看到其中name字段為數據庫日志名稱"數據庫日志名稱…

【MATLAB源碼-第206期】基于matlab的差分進化算法(DE)機器人柵格路徑規劃,輸出做短路徑圖和適應度曲線。

操作環境&#xff1a; MATLAB 2022a 1、算法描述 差分進化算法&#xff08;Differential Evolution, DE&#xff09;是一種有效的實數編碼的進化算法&#xff0c;主要用于解決實值函數的全局優化問題。本文將詳細介紹差分進化算法的背景、原理、操作步驟、參數選擇以及實際應…

返回分類信息(帶層級)

文章目錄 1.前端展示分類管理信息1.目前項目架構2.啟動前后端項目1.啟動mysql容器2.啟動后端 renren-fast3.啟動前端1.界面2.用戶名密碼都是admin 3.創建分類管理菜單1.菜單管理 -> 新增 -> 新增目錄2.刷新3.能夠新增菜單的原因是前端腳手架與renren-fast后端腳手架通信&…

全面理解BDD(行為驅動開發):轉變思維方式,提升軟件質量

在傳統的軟件開發流程中&#xff0c;開發人員和測試人員的工作通常是相互獨立的。開發人員負責編寫代碼&#xff0c;測試人員負責找出代碼中的問題。然而&#xff0c;這種方法可能導致溝通不足&#xff0c;而且會浪費時間和資源。為了解決這些問題&#xff0c;出現了一種新的開…

Mask2former代碼詳解

1.整體流程 Mask2former流程如圖所示&#xff0c;對于輸入圖片&#xff0c;首先經過Resnet等骨干網絡獲得多層級特征&#xff0c;對于獲得的多層級特征&#xff0c;一個方向經過pixel decoder(基于DetrTransformerEncoderLayer)得到per-pixel embedding,另外一個方向經過transf…

matlab的imclose()詳解

J imclose(I,SE) J imclose(I,nhood) 說明 J imclose(I,SE) 使用結構元素 SE 對灰度或二值圖像 I 執行形態學閉運算。形態學閉運算是先膨脹后腐蝕&#xff0c;這兩種運算使用相同的結構元素。 J imclose(I,nhood) 對圖像 I 執行閉運算&#xff0c;其中 nhood 是由指定結…

mac監聽 linux服務器性能可視化(Grafana+Promethus+Node_exporter)

Grafana和promethus(普羅米修斯)的安裝和使用 監控系統的Prometheus類似于一個注冊中心&#xff0c;我們可以只需要配置一個Prometheus,而在其他服務器&#xff0c;只需要安裝node_exporter,它們的數據流轉就是通過exporter采集數據信息&#xff0c;然后告訴prometheus它的位置…

分布式鏈路追蹤 Zipkin+Sleuth(8)

項目的源碼地址 Spring Cloud Alibaba 工程搭建&#xff08;1&#xff09; Spring Cloud Alibaba 工程搭建連接數據庫&#xff08;2&#xff09; Spring Cloud Alibaba 集成 nacos 以及整合 Ribbon 與 Feign 實現負載調用&#xff08;3&#xff09; Spring Cloud Alibaba Ribbo…

CUDA專項

1、講講shared memory bank conflict的發生場景&#xff1f;以及你能想到哪些解決方案&#xff1f; CUDA中的共享內存&#xff08;Shared Memory&#xff09;是GPU上的一種快速內存&#xff0c;通常用于在CUDA線程&#xff08;Thread&#xff09;之間共享數據。然而&#xff0…

BUUCTF[PWN]

BUUCTF[PWN] 題目&#xff1a;warmup_csaw_2016 地址&#xff1a;warmup_csaw_2016ida打開&#xff0c;進main函數&#xff1a;gets函數的棧溢出&#xff1a;給出了sub_40060D函數的地址直接&#xff0c;溢出到sub_40060D的地址即可&#xff1a; from pwn import *p remote…

[Cmake Qt]找不到文件ui_xx.h的問題?有關Qt工程的問題,看這篇文章就行了。

前言 最近在開發一個組件&#xff0c;但是這個東西是以dll的形式發布的界面庫&#xff0c;所以在開發的時候就需要上層調用。 如果你是很懂CMake的話&#xff0c;ui_xx.h的文件目錄在 ${CMAKE_CURRENT_BINARY_DIR} 下 然后除了有關這個ui_xx.h&#xff0c;還有一些別的可以簡…

Verlog-流水燈-FPGA

Verlog-流水燈-FPGA 引言&#xff1a; ? 隨著電子技術的飛速發展&#xff0c;現場可編程門陣列&#xff08;FPGA&#xff09;已成為電子設計自動化&#xff08;EDA&#xff09;領域中不可或缺的組件。FPGA以其高度的靈活性和可定制性&#xff0c;廣泛應用于通信、圖像處理、工…

go-zero整合asynq實現分布式定時任務

本教程基于go-zero微服務入門教程&#xff0c;項目工程結構同上一個教程。 go-zero微服務入門教程&#xff08;點擊進入&#xff09; 本教程主要實現go-zero整合asynq實現分布式定時任務。 本文源碼&#xff1a;https://gitee.com/songfayuan/go-zero-demo &#xff08;教程源…