SSH
Secure Shell(SSH) 是由 IETF(The Internet Engineering Task Force) 制定的建立在應(yīng)用層基礎(chǔ)上的安全網(wǎng)絡(luò)協(xié)議。它是專為遠(yuǎn)程登錄會(huì)話(甚至可以用Windows遠(yuǎn)程登錄Linux服務(wù)器進(jìn)行文件互傳)和其他網(wǎng)絡(luò)服務(wù)提供安全性的協(xié)議,可有效彌補(bǔ)網(wǎng)絡(luò)中的漏洞。通過SSH,可以把所有傳輸?shù)臄?shù)據(jù)進(jìn)行加密,也能夠防止DNS欺騙和IP欺騙。還有一個(gè)額外的好處就是傳輸?shù)臄?shù)據(jù)是經(jīng)過壓縮的,所以可以加快傳輸?shù)乃俣取D壳耙呀?jīng)成為L(zhǎng)inux系統(tǒng)的標(biāo)準(zhǔn)配置。
SSH只是一種協(xié)議,存在多種實(shí)現(xiàn),既有商業(yè)實(shí)現(xiàn),也有開源實(shí)現(xiàn)。本文主要介紹OpenSSH免費(fèi)開源實(shí)現(xiàn)在Ubuntu中的應(yīng)用,如果要在Windows中使用SSH,需要使用另一個(gè)軟件PuTTY。
SSH的安全機(jī)制
SSH之所以能夠保證安全,原因在于它采用了非對(duì)稱加密技術(shù)(RSA)加密了所有傳輸?shù)臄?shù)據(jù)。
傳統(tǒng)的網(wǎng)絡(luò)服務(wù)程序,如FTP、Pop和Telnet其本質(zhì)上都是不安全的;因?yàn)樗鼈冊(cè)诰W(wǎng)絡(luò)上用明文傳送數(shù)據(jù)、用戶帳號(hào)和用戶口令,很容易受到中間人(man-in-the-middle)攻擊方式的攻擊。就是存在另一個(gè)人或者一臺(tái)機(jī)器冒充真正的服務(wù)器接收用戶傳給服務(wù)器的數(shù)據(jù),然后再冒充用戶把數(shù)據(jù)傳給真正的服務(wù)器。
但并不是說SSH就是絕對(duì)安全的,因?yàn)樗旧硖峁﹥煞N級(jí)別的驗(yàn)證方法:
第一種級(jí)別(基于口令的安全驗(yàn)證):只要你知道自己帳號(hào)和口令,就可以登錄到遠(yuǎn)程主機(jī)。所有傳輸?shù)臄?shù)據(jù)都會(huì)被加密,但是不能保證你正在連接的服務(wù)器就是你想連接的服務(wù)器??赡軙?huì)有別的服務(wù)器在冒充真正的服務(wù)器,也就是受到“中間人攻擊”這種方式的攻擊。
第二種級(jí)別(基于密鑰的安全驗(yàn)證):你必須為自己創(chuàng)建一對(duì)密鑰,并把公鑰放在需要訪問的服務(wù)器上。如果你要連接到SSH服務(wù)器上,客戶端軟件就會(huì)向服務(wù)器發(fā)出請(qǐng)求,請(qǐng)求用你的密鑰進(jìn)行安全驗(yàn)證。服務(wù)器收到請(qǐng)求之后,先在該服務(wù)器上你的主目錄下尋找你的公鑰,然后把它和你發(fā)送過來的公鑰進(jìn)行比較。如果兩個(gè)密鑰一致,服務(wù)器就用公鑰加密“質(zhì)詢”(challenge)并把它發(fā)送給客戶端軟件。客戶端軟件收到“質(zhì)詢”之后就可以用你的私鑰在本地解密再把它發(fā)送給服務(wù)器完成登錄。與第一種級(jí)別相比,第二種級(jí)別不僅加密所有傳輸?shù)臄?shù)據(jù),也不需要在網(wǎng)絡(luò)上傳送口令,因此安全性更高,可以有效防止中間人攻擊。
SSH的安裝
SSH分為客戶端 openssh-client 和服務(wù)器 openssh-server,可以利用以下命令確認(rèn)電腦上是否安裝了客戶端和服務(wù)器。
dpkg -l | grep ssh
如果只是想遠(yuǎn)程登陸別的機(jī)器只需要安裝客戶端(Ubuntu默認(rèn)安裝了客戶端),如果要開放本機(jī)的SSH服務(wù)就需要安裝服務(wù)器。
sudo apt-get install openssh-client sudo apt-get install openssh-server
啟動(dòng)服務(wù)器的SSH服務(wù)
首先確認(rèn)ssh-server是否已經(jīng)啟動(dòng)了
ps -e | grep ssh
如圖,sshd 表示ssh-server已經(jīng)啟動(dòng)了。如果沒有啟動(dòng),可以使用如下命令啟動(dòng):
sudo /etc/init.d/ssh start
停止和重啟ssh服務(wù)的命令如下:
sudo /etc/init.d/ssh stop #server停止ssh服務(wù) sudo /etc/init.d/ssh restart #server重啟ssh服務(wù)
接下來就可以進(jìn)行使用客戶機(jī)遠(yuǎn)程登錄服務(wù)器了~
SSH兩種級(jí)別的遠(yuǎn)程登錄
一、口令登錄
口令登錄非常簡(jiǎn)單,只需要一條命令,命令格式為: **ssh 客戶端用戶名@服務(wù)器ip地址 **eg:
ssh ldz@192.168.0.1
如果需要調(diào)用圖形界面程序可以使用 -X 選項(xiàng)
ssh -X ldz@192.168.0.1
如果客戶機(jī)的用戶名和服務(wù)器的用戶名相同,登錄時(shí)可以省略用戶名。
ssh 192.168.0.1
還要說明的是,SSH服務(wù)的默認(rèn)端口是22,也就是說,如果你不設(shè)置端口的話登錄請(qǐng)求會(huì)自動(dòng)送到遠(yuǎn)程主機(jī)的22端口。我們可以使用** -p 選項(xiàng)來修改端口號(hào)**,比如連接到服務(wù)器的1234端口:
ssh -p 1234 ldz@192.168.0.1
客戶機(jī)必須要知道服務(wù)器的ip地址??梢栽诜?wù)器端電腦上利用** ifconfig** 命令查看該機(jī)的ip地址:
如果是第一次登錄遠(yuǎn)程主機(jī),系統(tǒng)會(huì)給出下面提示:
意思是,該遠(yuǎn)程主機(jī)的真實(shí)性無法確定,其公鑰指紋為 SHA256:s8pZiuKQr7k7f+57j22lk/IdWC8143VQKR+EabeP5,確定想要繼續(xù)連接嗎?
輸入yes即可。這時(shí)系統(tǒng)會(huì)提示遠(yuǎn)程主機(jī)被添加到已知主機(jī)列表。
然后會(huì)要求我們輸入遠(yuǎn)程主機(jī)的密碼,輸入的密碼正確就可以成功登錄了。命令提示符會(huì)修改為遠(yuǎn)程主機(jī)的提示符,現(xiàn)在開始,終端中輸入的命令都將在服務(wù)器中執(zhí)行。
我們可以通過** Ctrl+D** 或者 exit 命令退出遠(yuǎn)程登錄。
二、公鑰登錄
每次登錄遠(yuǎn)程主機(jī)都需要輸入密碼是很不方便的,如果想要省去這一步驟,可以利用密鑰對(duì)進(jìn)行連接,還可以提高安全性。
1、在本機(jī)生成密鑰對(duì)
使用ssh-keygen命令生成密鑰對(duì):
ssh-keygen -t rsa #-t表示類型選項(xiàng),這里采用rsa加密算法
然后根據(jù)提示一步步的按enter鍵即可(其中有一個(gè)提示是要求設(shè)置私鑰口令passphrase,不設(shè)置則為空,這里看心情吧,如果不放心私鑰的安全可以設(shè)置一下),執(zhí)行結(jié)束以后會(huì)在 /home/當(dāng)前用戶 目錄下生成一個(gè) .ssh 文件夾,其中包含私鑰文件 id_rsa 和公鑰文件 id_rsa.pub。
2、將公鑰復(fù)制到遠(yuǎn)程主機(jī)中
使用ssh-copy-id命令將公鑰復(fù)制到遠(yuǎn)程主機(jī)。ssh-copy-id會(huì)將公鑰寫到遠(yuǎn)程主機(jī)的 ~/ .ssh/authorized_key 文件中
ssh-copy-id ldz@192.168.0.1
經(jīng)過以上兩個(gè)步驟,以后再登錄這個(gè)遠(yuǎn)程主機(jī)就不用再輸入密碼了。
三、Putty工具遠(yuǎn)程登錄
1.操作場(chǎng)景:本文以 PuTTY 軟件為例,介紹如何在 Windows 系統(tǒng)的本地電腦中使用遠(yuǎn)程登錄軟件登錄 Linux 實(shí)例。
2.適用本地操作系統(tǒng):Windows
3.鑒權(quán)方式:密碼或密鑰
4.前提條件
1)已獲取登錄實(shí)例的管理員帳號(hào)及密碼(或密鑰)。
2)云服務(wù)器實(shí)例已開通22號(hào)端口。
5.操作步驟
—使用密碼登錄
下載 Windows 遠(yuǎn)程登錄軟件,即 PuTTY。 PuTTY 的獲取方式:<u>點(diǎn)此獲取</u>
雙擊【putty.exe】,打開 PuTTY 客戶端。
-
在 PuTTY Configuration 窗口中,輸入以下內(nèi)容。如下圖所示:
圖片.png
參數(shù)舉例說明如下:
Host Name(or IP address):服務(wù)器的IP地址;
Port:服務(wù)器的端口,必須設(shè)置為22;
Connect type:選擇 “SSH”;
Saved Sessions:填寫會(huì)話名稱,例如 test。 配置 “Host Name” 后,再配置 “Saved Sessions” 并保存,則后續(xù)使用時(shí)您可直接雙擊 “Saved Sessions” 下保存的會(huì)話名稱即可登錄服務(wù)器;
單擊【Open】,進(jìn)入 “PuTTY” 的運(yùn)行界面,提示 “l(fā)ogin as:”。
在 “l(fā)ogin as” 后輸入用戶名,按 Enter。
-
在 “Password” 后輸入密碼,按 Enter。 輸入的密碼默認(rèn)不顯示,如下圖所示:
圖片.png
登錄完成后,命令提示符左側(cè)將顯示當(dāng)前登錄云服務(wù)器的信息。
—使用密鑰登錄
下載 Windows 遠(yuǎn)程登錄軟件,即 PuTTy。 請(qǐng)分別下載 putty.exe 和 puttygen.exe 軟件,PuTTy 的獲取方式:<u>點(diǎn)此獲取</u>。
雙擊【puttygen.exe】,打開 PuTTy Key 客戶端。
單擊【Load】,選擇并打開已下載的私鑰存儲(chǔ)路徑。如下圖所示: 例如,選擇并打開文件名為 david 的私鑰文件。
Ps: 當(dāng)不存在私鑰文件時(shí),可以選擇Conversions > Import key 導(dǎo)入公鑰(.pem)文件來生成私鑰文件(.ppk)

-
在 PuTTY Key Generator 窗口中,輸入密鑰名和設(shè)置 PuTTY 用于加密私鑰的密碼,單擊【Save private key】。如下圖所示:
圖片.png
- 在彈出的窗口中,選擇您存放密鑰的路徑,并在文件名欄輸入“密鑰名.ppk”,單擊【保存】。例如,將 david 私鑰文件另存為 david.ppk 密鑰文件。如下圖所示:
圖片.png
雙擊【putty.exe】,打開 PuTTY 客戶端。
在左側(cè)導(dǎo)航欄中,選擇【Connection】>【SSH】>【Auth】,進(jìn)入 Auth 配置界面。
-
單擊【Browse】,選擇并打開密鑰的存儲(chǔ)路徑。如下圖所示:
圖片.png
-
切換至 Session 配置界面,配置服務(wù)器的 IP、端口,以及連接類型。如下圖所示:
圖片.png
Host Name (IP address):服務(wù)器的IP;
Port:服務(wù)器的端口,必須填 22;
Connect type:選擇 “SSH”;
Saved Sessions:填寫會(huì)話名稱,例如 test。 配置 “Host Name” 后,再配置 “Saved Sessions” 并保存,則后續(xù)使用時(shí)您可直接雙擊 “Saved Sessions” 下保存的會(huì)話名稱即可登錄服務(wù)器;
單擊【Open】,進(jìn)入 “PuTTY” 的運(yùn)行界面,提示 “l(fā)ogin as:”。
在 “l(fā)ogin as” 后輸入用戶名,按 Enter。
-
在 “Passphrase for key "imported-openssh-key":” 后輸入 步驟4已設(shè)置的密碼,按 Enter。 輸入的密碼默認(rèn)不顯示,如下圖所示:
圖片.png
登錄完成后,命令提示符左側(cè)將顯示當(dāng)前登錄服務(wù)器的信息。






