Linux 探索之旅 | 第四部分第二課:SSH 連線,安全快捷

程式設計師聯盟發表於2019-02-21

Linux 探索之旅 | 第四部分第二課:SSH 連線,安全快捷

-- 作者 謝恩銘 轉載請註明出處

內容簡介


  1. 第四部分第二課:SSH連線,安全快捷
  2. 第四部分第三課預告:檔案傳輸,瀟灑同步

SSH連線,安全快捷


上一課是 Linux探索之旅 | 第四部分第一課:壓縮檔案,解壓無壓力

這一課的內容將讓你大呼過癮,也許是《Linux探索之旅》到目前為止最有意思的課之一。

我們會聊很多內容,會學習如何連線到遠端的一臺安裝有Linux的機器。

在本課程的開頭,我們略微提到過:可以配置安裝Linux的機器,只要機器開著,就可以遠端連線它。

我們不僅會學習如何遠端連線到Linux,還會學習其原理。

而且也會學習SSH協議,以及資料如何通過SSH加密,以及如何用SSH連線到遠端電腦。

因此,我們可以一窺網路和安全(密碼學)的奇幻世界。

設想一下:
你家裡的電腦安裝了Linux系統,處於開機狀態,你在工作的時候想起來要用家裡的電腦進行某項下載任務或者提取某個檔案。
此時,你可以遠端連線到家裡的Linux系統,開啟一個終端,就好像你坐在家裡的電腦面前一樣。
我們到目前為止所學關於終端的所有操作,你都可以在遠端連線到的機器上實現,哪怕這臺機器是在世界的另一個角落。

這一課對各位站長特別有用,因為我們可以遠端連線到自己網站的伺服器。

現在越來越多的人購買了伺服器,在伺服器上可以架設自己的網站,或提供服務(比如遊戲、檔案伺服器)。

一般來說,對伺服器的操作都需要遠端連線(因為我們一般都是租用伺服器提供商的遠端電腦,除非你有錢“任性”,那你可以買幾臺電腦來做伺服器。或者省錢一些的,可以買樹莓派之類的來搭建自己的伺服器),用終端來進行,而且基本都是用SSH協議來連線。

關於伺服器的知識,可以參看小編另一個已完結的系列教程《Web探索之旅》。

連線到遠端終端


到目前為止,我們本課程中所學的Linux的操作,都是我們本人坐在電腦前去操作自己面前的電腦。可能與我們原先還沒學程式設計,使用Windows電腦玩Dota時沒什麼區別:端坐在電腦前,按下開機鍵,電腦開機,然後... gg對戰平臺,網易對戰平臺,五人黑呀,好happy呀... (小編你可以了,不要重回大學時代好嘛...)

怎奈我們不甘寂寞(“一生有一種大海的氣魄,歲月一頁頁無情翻過。那乾坤留在我心中的一刻,就已經註定我不甘寂寞... ”),在一個地方待久了,總想去外面闖闖、看看。小編你真的是夠了...

Linux的一個強大之處就是可以很方便地操作很遠之處的另一臺安裝有Linux的電腦。這個功能早在Unix時代就已經有了。

當然了,Windows系統也可以遠端連線到另一個Windows系統,我們也可以從Linux系統連線到Windows系統、Mac系統,或者從Windows連線到Linux,Mac。等等。只不過使用起來沒有Linux下那麼順手。

今天,比如我住在法國巴黎,我可以很方便地遠端連線到位於美國紐約的一臺電腦。也可以連線到日本東京的一臺電腦。我也可以操作美國的那臺電腦給日本東京的電腦傳送檔案。

因為Internet(網際網路或英特網)的出現,這樣的事情在今天看來已經很平常了。

遠端連線技術大大節約了時間和精力。假如沒有這個技術,專門負責維護遠端伺服器的技術人員(通常稱為System Administrator,系統管理員)要給東京機房的電腦安裝一個軟體,那還得買飛機票去東京...

伺服器,英語是server。一般是指7天24小時不關機的電腦,這些電腦和你家裡的電腦類似,但又不一樣(通常更強勁,噪音更大 :P):也有一個處理器,一個或多個硬碟,等等。伺服器的主要特色是保持開機,始終連線Internet,提供服務。

我們把連線到伺服器的機器稱為客戶機,英語是client,我們本課之後的圖片中也會像下圖這樣來表述:

Linux 探索之旅 | 第四部分第二課:SSH 連線,安全快捷

目前,你家裡的電腦應該還不能被稱為一臺伺服器。當然,如果你願意,你也可以將其“變為”一臺伺服器,只需要安裝一些軟體,做一些配置。

還有就是:不關機。

因為一臺關機的伺服器,就不是《服務》的機器了。作為伺服器必須“任勞任怨,隨叫隨到;當機重啟,永不言棄”。

接下來,我們就有請今天的主角:SSH 上場。

不過我們會先講很多其他的相關知識點。

前方密集知識點高能預警。準備好了嗎?

我們將會以下面的順序來介紹SSH:

  • 為什麼要保護網路通訊?

  • SSH又是如何保護網路通訊的?

  • SSH的具體使用方法。

  • 從Telnet協議到SSH協議

協議


兩臺機器在網際網路上通訊的時候,需要遵循相同的協議。這不難理解,生活中,兩家公司要合作,要協商,也需要擬定一份協議,雙方都同意,並且簽署,遵守。一旦違反協議,交流合作即會結束。比如我們中國的主席訪問外國,和他們簽署一系列商業協議;只有雙方都遵循此協議,合作交流才能繼續。

同樣地,對於我們的網際網路(Internet),要在其上相互通訊,也需要一定的協議。網際網路畢竟是人創立的嘛,那肯定引入了人的慣有思維。

或者我們也可以把網際網路協議(有時也稱為網路協議。參看百度百科:baike.baidu.com/view/16603.… )比作一種語言:只有都說英語或都說中文才能相互交流。

網際網路協議有很多,就不一一列舉了,可以看上面百度百科連結裡的列表。因此,兩臺機器之間可以有不少種方式相互通訊(每種協議對應一種通訊方式)。

身為讀者的您肯定已經見過其中的一種協議了,那就是HTTP協議。只要你上網瀏覽網頁,那麼你其實一直在使用這種協議,還記得我們程式設計師聯盟的網址嗎?

coderunity.com

這個網站目前沒什麼東西,因為我停止了阿里雲伺服器的續費。
正在用Hexo搭建新網站,之後會陸續把文章放上去。

看到最前面的http四個英文字母了嗎?這就說明它遵循的是HTTP協議。因此,你的電腦能看到程式設計師聯盟的官方網站,是因為你的電腦和程式設計師聯盟的伺服器之間使用了HTTP協議來互相通訊。

HTTP是英語Hyper Text Transfer Protocol的縮寫,表示《超文字傳輸協議》。protocol是英語《協議》的意思。HTTP協議是Web(Web可以簡單翻譯為《網路》)最常用的傳輸網頁的協議。

其他常見的網路協議有FTP,是英語File Transfer Protocol的簡稱,表示《檔案傳輸協議》。一般站長常用FTP,因為需要把檔案(比如網站的原始碼)傳輸到遠端的網站伺服器上。以前在大學時代,學校也會有公共的FTP站點,供學生們下載需要的學習資料。

還有我們每天使用郵箱所需要遵循的協議,常見的有IMAP和POP3。IMAP是Internet Message Access Protocol(網際網路訊息訪問協議)的縮寫,POP3是Post Office Protocol Version 3(郵局協議第三版)的縮寫。一般我們使用Office Outlook,Thunderbird,Gmail,163郵箱,QQ郵箱等,都需要遵循相應的郵件協議。

Telnet協議:簡單易用危險多


既然我們這課的重點是講遠端連線,那麼我們就來談談遠端連線的協議好了。首先,介紹一個老古董:

Telnet

這個協議簡單,易用,在20世紀80年代就被創立了。它的功用就是在機器間傳輸簡單資訊。

理論上,我們就可以使用Telnet來與遠端機器通訊啦,比如與我們的伺服器通訊。

但是這個協議有什麼缺點呢?那就是它太簡單太基礎了,因此傳輸的資訊並沒有經過加密,而是明文傳輸。

在密碼學中,明文(英語是:Plaintext或Cleartext)是指傳送方想要接收方獲得的可讀資訊(比如《我愛你》,《Hello World》)。

明文經過加密所產生的資訊被稱為密文(英語:ciphertext或cyphertext),而密文經過解密還原得來的資訊就是明文。

如果在網際網路上傳輸明文,那是很危險的。假設以下場景:

一臺軍方的客戶端電腦請求軍方的伺服器提供發射導彈的密碼(可能是核彈,嚇死寶寶了...),伺服器用明文將密碼傳輸給客戶端。

如下圖所示:

Linux 探索之旅 | 第四部分第二課:SSH 連線,安全快捷

從上圖看來,並沒有什麼風險不是嗎?因為資訊只傳遞給了發出請求的客戶機。

但是,很有可能一個不懷好意的黑客,監聽了上面兩者通訊的資訊,就可以擷取軍方伺服器發給軍方客戶機的明文資訊了。如下圖所示:

Linux 探索之旅 | 第四部分第二課:SSH 連線,安全快捷

要阻止這樣的黑客行為是很難的。雖說攔截資料這樣的操作本身有難度,但是水平高的黑客是可以輕易做到的。

比如, 像Wireshark這樣的軟體就可以被用於監聽網路(尤其是本地網路),可以截獲資料。如下圖所示:

Linux 探索之旅 | 第四部分第二課:SSH 連線,安全快捷

你也許會說:“呃... 等等。我只是想遠端連線到我的電腦或伺服器以便訪問終端控制檯。我可不會共享核彈密碼!況且我在電腦上只是執行grep之類的命令,被人知道也無妨啊。”

你的意思是你並不介意別人窺探你的電腦咯?好吧,你贏了...

但是當你連線到伺服器時,你需要提供你的登入名和密碼,假如被人竊取就麻煩了。

所以,必須加密網路間傳輸的資訊,你應該不希望自己的密碼被人知道吧。

SSH協議:保護資訊的好方法


既然我們並不能阻止心懷不軌的人試圖擷取Internet上傳輸的資訊,那麼我們就要採取一些措施,使客戶機和伺服器之間以安全的方式通訊。加密技術就是專門替我們做這等差事的:假如黑客獲取了加密後的密碼,他便不能做什麼。

但是怎麼加密資料呢?客官莫急,待我把主角SSH請上來~

使用SSH的資訊交換是如何加密的


SSH是英語Secure SHell的縮寫,直譯過來就是“安全的Shell”,shell是英語《殼》的意思。

在電腦科學中,Shell俗稱“殼”(用來區別於“核”),是指“提供使用者使用介面”的軟體(命令解析器)。它類似於DOS下的command(是英語“命令”的意思)和後來的cmd.exe。
它接收使用者命令,然後呼叫相應的應用程式。Linux下有Bash等Shell程式,之後我們有專門的一大部分會講Shell程式,不要擔心。

如果是Windows使用者,那很有可能知道cmd(是command的縮寫)這個命令吧。我們有時會使用到它。如何執行這個命令呢?

  • 點選:開始->執行

Linux 探索之旅 | 第四部分第二課:SSH 連線,安全快捷

  • 輸入“cmd”->回車

Linux 探索之旅 | 第四部分第二課:SSH 連線,安全快捷

  • 在出現的黑視窗裡輸入命令,回車執行。

Linux 探索之旅 | 第四部分第二課:SSH 連線,安全快捷

不可諱言,SSH協議本身比較複雜,但是如果能對其大致原理有所瞭解,豈不快哉?

如果知其所以然,那使用的時候也不會那麼盲目了。所以我們從以下兩條主線來了解SSH:

  1. 有哪些不同的加密方法

  2. SSH又是如何運用加密方法來保護資料的

不同的加密方法


說到加密方法,就要涉及到相應的演算法了。什麼是演算法呢?

百度百科的解釋:
演算法(Algorithm)是指解題方案的準確而完整的描述,是一系列解決問題的清晰指令,演算法代表著用系統的方法描述解決問題的策略機制。

所以下面我們就直接用“加密演算法”這個詞了。

要說不同的加密演算法,那實在是三天三夜講不完啊,所以小編就不在這給大家“一千零一夜”了。

雖說我們不能瞭解所有的加密演算法(也沒那個必要),但是我們需要知道加密演算法大致分兩類:

  • 對稱加密

  • 非對稱加密

對稱加密


對稱加密是比較簡單的加密演算法,但簡單並不意味著不保險(有很安全的對稱加密演算法)。簡單意味著功能比較好理解。

對稱加密演算法用一個金鑰(英文稱為Key,是《鑰匙》的意思。是在明文轉換為密文或將密文轉換為明文的演算法中輸入的引數)來加密資訊。

舉個例子,假如此金鑰叫superkey(super+key,意為“超級金鑰”),而需要被加密的資訊是message(英語《資訊》的意思),那麼加密過程如下圖所示:

Linux 探索之旅 | 第四部分第二課:SSH 連線,安全快捷

上圖是對稱加密的加密過程的簡單演示。傳輸方用superkey這個金鑰將message這個明文資訊進行加密,成為P7&(jk2%這樣的密文。

之後,接收方用同樣的金鑰superkey,對P7&(jk2%這個密文進行解密,就重新得到了明文message。解密的過程如下圖所示:

Linux 探索之旅 | 第四部分第二課:SSH 連線,安全快捷

上圖就是對稱加密中用同樣的金鑰superkey進行解密的過程。

因此,不難理解,對稱加密中“對稱”的意思就是指加密和解密使用的是同一個金鑰。因此加密方和解密方都須要知道這個金鑰。

這樣,假如黑客截獲了P7&(jk2%這個傳輸的密文,他沒有解密的金鑰superkey,他就不知道究竟是什麼明文資訊了。如下圖所示:

Linux 探索之旅 | 第四部分第二課:SSH 連線,安全快捷

你會說:“這樣很不錯啊”。

但是,客戶機和伺服器都須要知道這個金鑰。因此客戶機首先要把這個金鑰傳給伺服器,為了讓伺服器可以解密那些加密過的資訊。

實際上,為了達到上圖的目的,客戶機和伺服器必須事先傳遞那個金鑰superkey。

但是他們怎麼傳遞呢?假如他們傳遞金鑰用的是明文,那麼黑客照樣可以截獲金鑰,接下來就可以解密任何傳遞的加密資訊了,不是嗎?如下圖所示:

Linux 探索之旅 | 第四部分第二課:SSH 連線,安全快捷

因此,對稱加密雖然強大,但是有一個致命的缺陷:必須謹慎地傳遞金鑰。但這幾乎是不可能的:因為首先得把金鑰傳遞過去。

你也許會問:為什麼我們不乾脆把傳遞的金鑰也加密呢?

好問題,你的想法也是對的。Bravo !

為了加密用於對稱加密的金鑰(是不是很繞?),我們將用另一種方法:

非對稱加密

只要用了這個方法,我們就不用擔心金鑰被黑客獲取了。

非對稱加密


  • 對稱加密方法中,我們只用一個金鑰來進行加密和解密。

  • 非對稱加密方法中,我們用一個金鑰來進行加密,用另一個金鑰來解密。

因此,非對稱加密有兩個金鑰:

  • 一個是"公鑰"(Public Key),用於加密。

  • 一個是"私鑰"(Private Key),用於解密。

公鑰只用來加密。因此,用非對稱加密的演算法,我們就只能用私鑰來解密咯。

我們請求電腦為我們生成這一對金鑰:一個私鑰和一個公鑰。它們總是成對出現。

但是您不要問我生成這一對金鑰的原理,也不要問我為什麼它們總是成對出現。因為“我不想說,我很親切;我不想說,我很純潔。可是我不能拒絕心中的感覺...”。 不好意思,跑題了(想起了楊鈺瑩的經典歌曲《我不想說》)。

其實是因為原理很複雜,我們只要知道怎麼用就好了。

假設我們有如下一對金鑰:

  • 公鑰:37ab47pK

  • 私鑰:1Tv314C

為了加密,我們要用到公鑰,如下圖所示:

Linux 探索之旅 | 第四部分第二課:SSH 連線,安全快捷

而解密呢,公鑰就派不上用場了。必須用私鑰才行。“公私分明,方為大德”嘛。如下圖所示:

Linux 探索之旅 | 第四部分第二課:SSH 連線,安全快捷

這就是為什麼我們稱這種方法為非對稱的原因:需要兩個不同的金鑰。其中一個用於加密,另一個用於解密。

公鑰可以在網路上以明文傳輸,畢竟是公開的金鑰嘛(Public是英語"公開的,公共的"的意思)。即使公鑰被不懷好意的黑客截獲也無所謂。

但是,私鑰(private是英語"私人的,私有的"的意思),用於解密的,卻不能被公開傳輸,需要保管好。

當然了,非對稱演算法絕不止一種。在這個大家族中,最有名的要數RSA演算法了。

1977年,三位數學家Rivest、Shamir 和Adleman 設計了一種演算法,可以實現非對稱加密。這種演算法用他們三個人的名字的首字母命名,叫做RSA演算法。

用SSH建立一個安全的通訊管道


SSH結合使用非對稱加密和對稱加密兩種方法


SSH以如下順序使用兩種加密方法:非對稱加密和對稱加密。

  1. 首先,使用非對稱加密,安全地傳輸對稱加密的金鑰。

  2. 之後,就一直使用對稱加密的金鑰來作為加密和解密的手段。

聰明如你一定會好奇:那為什麼不只用非對稱加密呢?

當然可以只用非對稱加密,但是也有一個缺陷:非對稱加密太消耗電腦資源了。非對稱加密比對稱加密要慢大概100~1000倍。

因此,兩臺電腦之間首先交換對稱加密的金鑰(用非對稱加密的方式),之後就可以用對稱加密來通訊了,會更快捷。

非對稱加密只是在通訊之初用於交換對稱加密的金鑰。

讓我們用圖解的方式來解釋一下SSH是如何建立一個安全的通訊管道的:

首先,我們要交換一個對稱加密的金鑰,但是我們又不能以明文方式傳輸這個金鑰,不然黑客截獲之後就可以用其來解密了。因此,我們要用非對稱加密的方式來加密用於對稱加密的金鑰(希望您還沒暈)。

伺服器將非對稱加密的公鑰以明文方式傳輸給客戶機,使客戶機可以用公鑰來加密。如下圖:

Linux 探索之旅 | 第四部分第二課:SSH 連線,安全快捷

客戶機收到伺服器傳給它的公鑰之後,就會用公鑰來加密自己的對稱加密的金鑰,假設是superkey。如下圖所示:

Linux 探索之旅 | 第四部分第二課:SSH 連線,安全快捷

然後,客戶機將用公鑰加密後的對稱加密金鑰傳給伺服器。黑客可以截獲這個加密後的金鑰,但是他沒辦法解密,因為他沒有用於解密的私鑰,這個私鑰只有伺服器知道。如下圖所示:

Linux 探索之旅 | 第四部分第二課:SSH 連線,安全快捷

伺服器接收到客戶機傳來的金鑰,使用自己的私鑰來解密,就得到了對稱加密的金鑰。如下圖所示:

Linux 探索之旅 | 第四部分第二課:SSH 連線,安全快捷

現在,客戶機和伺服器都知道了對稱加密的金鑰是superkey,而他們從沒在網路間以明文傳遞過這個金鑰。

因此,從現在開始他們可以用對稱加密的方式互相傳送加密的資訊(用superkey來加密和解密),不用再擔心被黑客獲取資訊了。如下圖所示:

Linux 探索之旅 | 第四部分第二課:SSH 連線,安全快捷

以上就是SSH的工作原理了。是不是很巧妙地建立了一條安全通訊的管道呢,設計這些的IT前輩們真的非常機智,智商高達250呢~

現在既然客戶機和伺服器已經有了安全的通訊方式,客戶機就可以放心地將自己的登入名和密碼傳輸給伺服器以連線伺服器了。如下圖:

Linux 探索之旅 | 第四部分第二課:SSH 連線,安全快捷

那麼,須要知道以上這些原理才能使用SSH嗎?

當然不是啦。以上這些都是自動完成的。為了連線遠端電腦,你要做的只是輸入登入名和密碼就好了。

現在全球都在使用SSH,幾乎沒有人再用Telnet了。

用SSH進行連線


我們接下來的命令都是以Debian系列(Ubuntu為代表)來演示的,其他Linux發行版的命令格式類似。

好了,理論談得夠多了,該實戰了。你會發現SSH使用起來很簡單,因為電腦替我們做了大部分工作。

接下來我們分為兩種情況:

  • 你已經租用了一臺伺服器,那這臺伺服器因為已經配置好了作為SSH伺服器,所以你什麼也不需要做。估計站長大多是這種情況吧。

  • 你沒有租用一臺伺服器(大多數人的情況),我們就來看看怎麼把你自己的電腦配置成SSH伺服器。

將你的電腦配置成SSH伺服器


假如你要將自己的電腦配置成SSH伺服器,以便自己或別人以後可以遠端用SSH登入你的電腦,你可以這麼做:

首先,安裝openssh

OpenSSH 是 SSH協議的免費開源實現。

sudo apt-get install openssh-server複製程式碼

安裝完成後,它會自動開啟sshd這個精靈程式(Daemon Process,或稱為守護程式。是一種執行在後臺的特殊程式)。

你也可以手動開啟sshd:

# Ubuntu系統
sudo service ssh start複製程式碼
# Debian系統
sudo /etc/init.d/ssh start複製程式碼

要停止的話:

# Ubuntu系統
sudo service ssh stop複製程式碼
# Debian系統
sudo /etc/init.d/ssh stop複製程式碼

如果你要對SSH的配置做修改,可以修改/etc/ssh/ssh_config,然後執行

sudo /etc/init.d/ssh reload複製程式碼

sudo service ssh reload複製程式碼

來使修改生效。

從一臺Linux電腦上通過SSH連線


假定你要以使用者名稱user,用SSH協議登入遠端伺服器host,只要一條簡單命令就可以了:

ssh user@host複製程式碼

如果本地使用者名稱與遠端使用者名稱一致,登入時可以省略使用者名稱:

ssh host複製程式碼

SSH的預設埠是22。也就是說,你的登入請求會被送進遠端伺服器的22埠。

使用p引數,可以修改這個埠(p是port的縮寫,表示“埠”):

ssh -p 250 user@host複製程式碼

上面這條命令表示:SSH直接連線遠端伺服器的250埠。

如果你是第一次登入遠端伺服器,系統會出現類似下面的提示:

The authenticity of host 'host (12.18.429.21)' can't be established.
RSA key fingerprint is 98:2e:d7:e0:de:9f:ac:67:28:c2:42:2d:37:16:58:4d.
Are you sure you want to continue connecting (yes/no)?複製程式碼

這段話的意思是:無法確認host伺服器的真實性,只知道它的公鑰指紋,你還想繼續連線嗎?

所謂"公鑰指紋",是因為公鑰長度較長(這裡採用RSA演算法,長達1024位),很難比對,所以對其進行MD5計算,將它變成一個128位的指紋(也就是上例中的98:2e:d7:e0:de:9f:ac:67:28:c2:42:2d:37:16:58:4d 這一串十六進位制數),再進行比較,就容易多了。

很自然的一個問題就是:使用者怎麼知道遠端伺服器的公鑰指紋應該是多少?回答是沒有好辦法,遠端伺服器必須在自己的網站上貼出公鑰指紋,以便使用者自行核對。

假定經過風險衡量以後,使用者決定接受這個遠端伺服器的公鑰(輸入yes,回車):

Are you sure you want to continue connecting (yes/no)? yes複製程式碼

系統會出現一句提示,表示host主機(也就是我們在操作的電腦)已經得到認可:

Warning: Permanently added 'host,12.18.429.21' (RSA) to the list of known hosts.複製程式碼

然後,會要求輸入密碼:

Password: (enter password)複製程式碼

如果密碼正確,就可以登入了。

當遠端伺服器的公鑰被接受以後,它就會被儲存在檔案$HOME/.ssh/known_hosts之中(HOME是環境變數,通常儲存了使用者家目錄的絕對路徑,比如我的HOME就是/home/oscar)。下次再連線這臺伺服器時,系統就會認出它的公鑰已經儲存在本地了,從而跳過警告部分,直接提示輸入密碼。

每個SSH使用者都有自己的known_hosts檔案。此外系統也有一個這樣的檔案,通常是/etc/ssh/ssh_known_hosts,儲存一些對所有使用者都可信賴的遠端伺服器的公鑰。

從一臺Windows電腦上通過SSH連線


從Windows電腦要連線到遠端的SSH伺服器,有不少軟體可以幫助我們。不過一般常用的是PuTTY這個軟體。

PuTTY這個軟體可以從它的官網(www.putty.org,儘量不要去第三方軟體網站下載,以防有內建惡意程式)下載可直接執行的可執行程式putty.exe,也可以下載安裝程式(例如 putty-0.66-installer.exe):

下載或安裝完畢後雙擊軟體圖示開啟軟體。

Linux 探索之旅 | 第四部分第二課:SSH 連線,安全快捷

開啟PuTTY後,可以看到如下視窗

Linux 探索之旅 | 第四部分第二課:SSH 連線,安全快捷

在上圖的紅色方框處填入要連線的伺服器的IP地址,然後點選Open按鈕,如果是首次連線,會彈出以下視窗,點選“是”即可:

Linux 探索之旅 | 第四部分第二課:SSH 連線,安全快捷

在彈出的命令列視窗中依次輸入使用者名稱和密碼。注意Linux系統下輸入的所有密碼都是不可見的(也不會用星號表示),所以你不要以為是鍵盤壞了或者輸入不起作用,其實已經輸入了:

Linux 探索之旅 | 第四部分第二課:SSH 連線,安全快捷

用金鑰實現自動身份驗證


使用密碼登入,每次都必須輸入密碼,非常麻煩。幸虧SSH還提供了公鑰登入,可以省去輸入密碼的步驟。

所謂"公鑰登入",原理很簡單,就是使用者將自己的公鑰儲存在遠端伺服器上。登入的時候,傳送一個經過公鑰加密的隨機資料給客戶機,這個資料只能通過私鑰解密,客戶機將解密後的資訊發還給伺服器,伺服器驗證正確後即確認客戶機是可信任的,從而建立起一條安全的資訊通道,直接允許登入shell,不再要求密碼。

Linux 探索之旅 | 第四部分第二課:SSH 連線,安全快捷

這種方法要求使用者必須提供自己的公鑰。如果沒有現成的,可以直接用ssh-keygen命令生成一個:

ssh-keygen複製程式碼

執行上面的命令以後,系統會出現一系列提示,可以一路回車。其中有一個問題是,要不要對私鑰設定口令(passphrase),如果擔心私鑰的安全,這裡可以設定一個。一般都不設定。

執行結束以後,在$HOME/.ssh/目錄下,會新生成兩個檔案:id_rsa.pub和id_rsa。前者是你的公鑰,後者是你的私鑰。

這時再輸入下面的命令,將公鑰傳送到遠端伺服器host上面:

ssh-copy-id user@host複製程式碼

好了,從此你再登入,就不需要輸入密碼了。

如果還是不行,就開啟遠端伺服器的/etc/ssh/sshd_config這個檔案,檢查下面幾行前面的"#"註釋是否取掉。

RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys複製程式碼

然後,重啟遠端伺服器的ssh服務:

# Ubuntu系統
sudo service ssh restart複製程式碼
# Debian系統
sudo /etc/init.d/ssh restart複製程式碼

總結


  1. 我們可以遠端連線到Linux系統,進入它的終端。我們一般都是這樣操作遠端伺服器的。

  2. 我們一般把連線到遠端Linux伺服器的電腦稱為client,就是客戶。我們可以從多種作業系統遠端連線到Linux的終端,比如從Windows,Linux,Mac,Unix系統。

  3. 在Windows下,為了遠端連線到Linux系統,一般我們會用PuTTY這個軟體。

  4. 在Linux和Mac下,為了遠端連線到Linux系統,我們可以用ssh命令,為它指定在遠端Linux機器上的登入名(login)和遠端Linux機器的IP地址。例如:

    ssh oscar@79.27.172.59複製程式碼
  5. 通過SSH協議, 兩臺機器之間傳遞的資訊會被加密,這樣就保證了傳輸資訊的安全性。

  6. 為了免去每次用SSH協議連線遠端機器都要輸入使用者密碼的麻煩,我們可以建立一個用於驗證身份的金鑰對(公鑰和私鑰)。公鑰需要傳輸並儲存到遠端機器上,私鑰則存在我們自己的電腦裡。之後,我們的SSH連線就不需要輸入密碼了。

第四部分第三課預告


今天的課就到這裡,一起加油吧!

下一課我們學習:Linux探索之旅 | 第四部分第三課:檔案傳輸,瀟灑同步


微信公眾號「程式設計師聯盟」ProgrammerLeague
我是謝恩銘,在巴黎奮鬥的軟體工程師。
我的簡介
我的經歷
熱愛生活,喜歡游泳,略懂烹飪。
人生格言:“向著標杆直跑”

相關文章