文章目錄
- 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