自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

從入門到精通:構(gòu)建SSH安全通道

原創(chuàng)
安全 網(wǎng)站安全
本文詳細(xì)講述了構(gòu)建SSH安全通道,通過SSH進(jìn)行通信。

【51CTO.com獨(dú)家特稿】SSH命令行實(shí)用程序是遠(yuǎn)程系統(tǒng)的工作人員安全訪問的通道。SSH代表著“安全外殼”,所以你可能認(rèn)為其最常用的使用方法就是用作一個(gè)遠(yuǎn)程外殼。也許這是其最常見的應(yīng)用,但并非使用SSH的唯一的有趣方法。

一、連接、執(zhí)行遠(yuǎn)程命令并使用授權(quán)密鑰

1、創(chuàng)建一個(gè)連接

為通過SSH進(jìn)行通信,你首先需要建立一個(gè)到達(dá)遠(yuǎn)程服務(wù)器的連接。使用SSH命令行實(shí)用程序時(shí),我們有很多參數(shù)選擇。最基本的命令行參數(shù)是:

1、SSH IP地址

在這里,IP地址就是你想要連接的服務(wù)器的IP地址。下面是一個(gè)簡單的例子:

abc:~ jmjones$ ssh 192.168.1.20
The authenticity of host '192.168.1.20 (192.168.1.20)' can't be established.
RSA key fingerprint is 24:1e:2e:7c:3d:a5:cd:a3:3d:71:1f:6d:08:3b:8c:93.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.1.20' (RSA) to the list of known hosts.

注意,上面的消息中有這樣一行“The authenticity of host '192.168.1.20 (192.168.1.20)' can't be established.”。這條消息意味著筆者的SSH 客戶端并不知道遠(yuǎn)程服務(wù)器。筆者在這里用了“客戶端”,因?yàn)镾SH命令行實(shí)用程序初始化了網(wǎng)絡(luò)并使其成為網(wǎng)絡(luò)客戶端。

在上面的消息中,SSH程序還詢問作者是否希望繼續(xù)連接(Are you sure you want to continue connecting (yes/no)? )筆者的回答是“yes”,因?yàn)楣P者知道這臺(tái)服務(wù)器正是筆者想連接的服務(wù)器。一般而言,對(duì)此問題回答“yes”是比較安全的。(但如果不懷好意的家伙假冒了你想連接的服務(wù)器,這樣做就危險(xiǎn)了。)在回答“yes”繼續(xù)連接后,筆者的客戶端用下面的內(nèi)容更新了文件$HOME/.ssh/known_hosts:

192.168.1.20 ssh-rsa 
^4rsa5jmjones6cd7jmjones8^/^9cd10^+9^11yc12yc13rsa14AAAAB15^+^16r
sa17AAAAB18^99u2^19oT20oT21^7N7^22AAAAB23^+^24cd25^5f+^26ykuwQcXI
27EAAAABIwAAAQEAvb28jmjones29oT30commandline31^2Ax3J88^32commandl
ine33yc34^+rOB+gOdRaD+NTkuzrB/^38oT39^50L6^40oT41AAAAB42^61rq+9v+4^
44AAAAB45rsa46ykuwQcXI47^5q1P11^48AAAAB49gcgPr50^==

在筆者再次連接到同樣的服務(wù)器時(shí),筆者的SSH客戶端將檢查“known_hosts”文件,檢查是否與上次的服務(wù)器相同。如果服務(wù)器傳回的信息與“known_hosts”文件中的信息不匹配,就會(huì)看到類似于下面的消息:

abc:~ jmjones$ ssh 192.168.1.20
WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!    
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that the RSA host key has just been changed.
The fingerprint for the RSA key sent by the remote host is
24:1e:2e:7c:3d:a5:cd:a3:3d:71:1f:6d:08:3b:8c:93.
Please contact your system administrator.
Add correct host key in /Users/jmjones/.ssh/known_hosts to get rid of this message.
Offending key in /Users/jmjones/.ssh/known_hosts:1
RSA host key for 192.168.1.20 has changed and you have requested strict checking.
Host key verification failed.

2、口令驗(yàn)證

繼續(xù)上面的例子。在回答了“yes”后,程序要求筆者輸入口令。下面是此次交互的部分信息:

jmjones@192.168.1.20's password:
Be careful.
No mail.
Last login: Tue Dec 30 06:36:20 2008 from abc
jmjones@oksir:~$

筆者鍵入了口令,然后ssh客戶端與遠(yuǎn)程服務(wù)器建立了一個(gè)交互連接。在此,可以看出登錄到一個(gè)Linux服務(wù)器的證據(jù),如上次登錄的時(shí)間。

3、授權(quán)密鑰

如果我們不想在每次登錄時(shí)都鍵入口令該怎么辦?或者,筆者是一個(gè)系統(tǒng)管理員,希望讓服務(wù)器更強(qiáng)健,讓不法之徒難以猜測,又該如何呢?我們可以使用一個(gè)公鑰/私鑰對(duì)來讓登錄到服務(wù)器的過程更安全更簡單。

為使用公鑰/ 私鑰對(duì),我們必須創(chuàng)建它??赏ㄟ^在命令行使用ssh –keygen程序來達(dá)此目的。其實(shí),該命令還是有許多參數(shù)的,如密鑰的類型、想要?jiǎng)?chuàng)建的文件名、密鑰文件的注釋等,不過我們完全只使用默認(rèn)選項(xiàng)。下面是筆者在沒有使用任何參數(shù)時(shí)的結(jié)果:

abc:~ jmjones$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/jmjones/.ssh/id_rsa):
Created directory '/Users/jmjones/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /Users/jmjones/.ssh/id_rsa.
Your public key has been saved in /Users/jmjones/.ssh/id_rsa.pub.
The key fingerprint is:
fe:e9:fa:f5:e2:4e:a1:6c:9e:9e:20:a4:cc:ec:4f:62 jmjones@abc
The key's randomart image is:
+--[ RSA 2048]----+
|                 |
|                 |
|                 |
|                 |
|      . S   .    |
|   + o . . . .   |
|    E o o + o    |
|   o o . = *..   |
|    ... .=Xoo..  |
+-----------------+

筆者接受了“id_rsa”作為密鑰文件,還接受了不輸入任何口令短語的默認(rèn)選項(xiàng)。如果選擇了給文件添加一個(gè)口令短語,那么在每次使用時(shí)都得輸入此短語。運(yùn)行ssh-keygen的結(jié)果是在$HOME/.ssh文件中生成了兩個(gè)文件:

abc:~ jmjones$ ls -l ~/.ssh/
total 16
-rw-------  1 jmjones  staff  1675 Dec 30 17:37 id_rsa
-rw-r--r--  1 jmjones  staff   400 Dec 30 17:37 id_rsa.pub

“id_rsa”是筆者的私鑰。筆者并不希望任何人可以訪問這個(gè)文件,以防止其他人冒充自己。注意,對(duì)“id_rsa”的限制強(qiáng)于對(duì)“id_rsa.pub”的限制。筆者可以將此文件傳送給希望連接的任何人。不用擔(dān)心,任何人都無法猜測我們的私鑰是什么。

如果筆者希望將此密鑰用于前面例子中的服務(wù)器,就可將公鑰的內(nèi)容放到遠(yuǎn)程服務(wù)器的“$HOME/.ssh/authorized_keys”文件中。為了設(shè)置正確,我們一般需要以SSH 方式連接到遠(yuǎn)程服務(wù)器并將本地的“id_rsa.pub”文件復(fù)制到遠(yuǎn)程“authorized_keys”文件中,如下所示:

jmjones@oksir:~$ echo "ssh-rsa 
AAAAB3NzaC1yc2EAAAABIwAAAQEAw4DTUeLXZbjjNhR+AaW9^102rsa103^+Pg2+Q
8M+gK/IGDbPjsAV4KwulqDWS+ChlIiq0wXj/bQKQwZacbghXud/YBI7FfYOkF1R9p
FZ7O9B7zJGAnAtcOEDLfyDhYF2Cl5/1HFolIUuUSCGPJy3bbIK5s6yNwQV6cW6yEF
UuqE8DHlGKf9jwDFgiXrhtuThH2EFGBCxELaumworegMD39Jb9^123rsa124^1zWF
qP2qHX/SzItHm1JrKJdnbsOn5h+KMTeztpn1AExOx1lxSFLk9lp4JAMk8NTURYmBc
AE6yASaQApw5jDw/JpSAdFaQR/Vl6Kpzf9MD1KAEpyd8RaxLa+RQ== jmjones@abc" > ~/.ssh/authorized_keys
jmjones@oksir:~$ ls -l ~/.ssh/
total 4
-rw-r--r-- 1 jmjones jmjones 400 2008-12-30 17:48 authorized_keys
jmjones@oksir:~$

此后,在登錄時(shí),程序就不再提示輸入口令。這里,登出服務(wù)器,然后再次以SSH方式進(jìn)入:

jmjones@oksir:~$ logout
Connection to 192.168.1.20 closed.
abc:~ jmjones$ ssh 192.168.1.20
Be careful.
No mail.
Last login: Tue Dec 30 17:50:26 2008 from abc

請(qǐng)注意,筆者的客戶端并沒有提示要求輸入口令。現(xiàn)在,只要想連接到此服務(wù)器,只要想以SSH方式登錄,便會(huì)立即連接。

4、執(zhí)行遠(yuǎn)程命令

前面提到,在SSH連接到遠(yuǎn)程服務(wù)器后,默認(rèn)地我們就處于外殼提示符下,但這并不是我們可做的唯一事情。使用SSH客戶端的另外一個(gè)有用方法是在遠(yuǎn)程服務(wù)器上執(zhí)行命令,而不用鍵入到遠(yuǎn)程服務(wù)器上的交互外殼中。也就是說,在本地系統(tǒng)上執(zhí)行SSH程序時(shí),你可以指定在遠(yuǎn)程系統(tǒng)上運(yùn)行什么命令。例如,如果希望看到某個(gè)進(jìn)程是否正在遠(yuǎn)程系統(tǒng)的25號(hào)端口上監(jiān)聽,可像如下一樣操作:

abc:~ jmjones$ ssh 192.168.1.20 netstat -ltpn | grep 25
(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
tcp    0   0 127.0.0.1:25   0.0.0.0:*  LISTEN      -

在第一行中,其語法是“ssh 地址 命令”,我們可以用此法檢查磁盤的利用率,查看有哪些進(jìn)程正在運(yùn)行,或復(fù)制文件等。

為什么不直接登錄然后以交互方式運(yùn)行命令呢?因?yàn)檫@會(huì)喪失腳本的好處。從現(xiàn)在起,在遠(yuǎn)程系統(tǒng)上執(zhí)行命令成為外殼腳本的一部分。

可以看出,SSH是一個(gè)重要的工具。就其一般的使用情況,它準(zhǔn)許我們在遠(yuǎn)程服務(wù)器上以交互方式管理外殼。這對(duì)于遠(yuǎn)程系統(tǒng)管理來說當(dāng)然是很有必要的。不過,通過使用授權(quán)密鑰,我們還可以增強(qiáng)認(rèn)證過程的安全性。它準(zhǔn)許我們在遠(yuǎn)程系統(tǒng)上運(yùn)行外殼腳本而無需處于交互式外殼中。#p# 本文

二、實(shí)用安全:構(gòu)建SSH安全通道

下面我們討論一些比遠(yuǎn)程外殼訪問或遠(yuǎn)程執(zhí)行更為有趣的內(nèi)容:創(chuàng)建隧道。

1、構(gòu)建隧道的理由

先談?wù)勈裁词撬淼馈?/P>

SSH隧道也就是用加密的SSH協(xié)議將網(wǎng)絡(luò)通信包裝起來的過程。隧道包括一個(gè)連接到SSH服務(wù)器的SSH客戶端。不過,在SSH客戶端連接到服務(wù)器時(shí),客戶端指定了隧道的源和目的地。

所謂的源也就是其它的進(jìn)程可以連接的綁定網(wǎng)絡(luò)端口。這個(gè)端口要么由SSH客戶端,要么由SSH服務(wù)器管理。

目的地是另外一個(gè)綁定的網(wǎng)絡(luò)端口,不過,這里指的是另外的一個(gè)網(wǎng)絡(luò)服務(wù)器,它是SSH隧道的另外一端可以與之通信的服務(wù)器。下面筆者將用一個(gè)例子更詳細(xì)地闡述之。讀者盡可以將SSH隧道看作是如同安全的端口轉(zhuǎn)發(fā)一樣的數(shù)據(jù)傳輸通道。

使用SSH隧道的一個(gè)重要理由是連接兩個(gè)彼此并不能直接訪問的兩個(gè)網(wǎng)絡(luò)。舉一個(gè)例子,假如你擁有一臺(tái)筆記本電腦,你想不管身在何處都能夠連接到家里的IMAP服務(wù)器。你可以打開家里的IMAP服務(wù)器的訪問,不過這并不是一個(gè)好主意。你可以在路由器上建立一個(gè)VPN隧道,不過,這樣也許有點(diǎn)太過于奢侈。當(dāng)然,在你想訪問IMAP服務(wù)時(shí),你還可以創(chuàng)建一個(gè)從筆記本電腦到家里網(wǎng)絡(luò)的SSH隧道。后文將有一個(gè)例子。

使用SSH隧道的第二個(gè)理由是它可以加密網(wǎng)絡(luò)通信。在IMAP的例子中,使用SSH的另外一個(gè)好處是電子郵件數(shù)據(jù)是加密的。在你與親朋好友通信時(shí),這些通信數(shù)據(jù)在通過互聯(lián)網(wǎng)上的隧道傳輸時(shí)是很安全的。不過,在這種通信進(jìn)入隧道之前和離開隧道后它并沒有經(jīng)過加密。

使用SSH時(shí),有兩種安全的端口轉(zhuǎn)發(fā):本地轉(zhuǎn)發(fā)和遠(yuǎn)程轉(zhuǎn)發(fā)。對(duì)于本地轉(zhuǎn)發(fā)而言,SSH客戶端管理源端口。對(duì)于遠(yuǎn)程轉(zhuǎn)發(fā)而言,SSH服務(wù)器管理源端口。你選擇的是本地或遠(yuǎn)程轉(zhuǎn)發(fā)都依賴于哪個(gè)系統(tǒng)發(fā)起連接,哪個(gè)系統(tǒng)在其上擁有SSH服務(wù)器,你在哪里需要隧道的源地址。

下面給出本地轉(zhuǎn)發(fā)的一個(gè)例子。繼續(xù)以上面的IMAP連接為例,假設(shè)我有一臺(tái)名稱為“abc”的筆記本電腦,我想訪問“oksir”機(jī)器上的一個(gè)IMAP服務(wù)器。為什么不直接連接到“oksir”呢?如果“oksir”位于防火墻之后而你無法連接到143端口,那么使用ssh隧道就是一個(gè)很好的選擇。

abc:~ jmjones$ ssh -L 8143:localhost:143 oksir

注意,這里的“-L”參數(shù)指明了這是一種本地轉(zhuǎn)發(fā)。而“8143”指明了筆者希望將127.0.0.1:8143綁定為隧道源?!發(fā)ocalhost:143”指明了要將通信轉(zhuǎn)發(fā)到何處。雖然在遠(yuǎn)程端上指明為“l(fā)ocalhost”,但也可以指定遠(yuǎn)程系統(tǒng)可以與之通信的任何地址和端口。最后,“oksir”指明了筆者希望以SSH方式進(jìn)入的機(jī)器。

在運(yùn)行此命令之前,筆者運(yùn)行了netstat命令,查看在筆記本電腦“abc”上是否有什么東西正在8143端口上監(jiān)聽:

abc:~ jmjones$ netstat -an | grep 8143
abc:~ jmjones$

根據(jù)運(yùn)行的結(jié)果可知沒有什么正在監(jiān)聽,在創(chuàng)建隧道之后,再次運(yùn)行netstat命令,這時(shí)看到了不同的結(jié)果:

abc:~ jmjones$ netstat -an | grep 8143
tcp4     0     0  127.0.0.1.8143   *.*    LISTEN
tcp6       0      0  ::1.8143 

從上面的netstat命令的運(yùn)行結(jié)果可以看出,SSH客戶端上的某程序正在127.0.0.1(本地的循環(huán)網(wǎng)絡(luò)設(shè)備)的8143端口上監(jiān)聽。任何與127.0.0.1:8143的連接都將被轉(zhuǎn)發(fā)給“oksir”上的localhost:143端口上。在創(chuàng)建隧道后,需要在筆記本電腦的電子郵件客戶端上配置一個(gè)賬戶,在locahos:8143上找一個(gè)IMAP服務(wù)器,并開始在“oksir”上讀郵件。

現(xiàn)在,我們假定服務(wù)器“oksir”使用fetchmail,并從ISP的pop3服務(wù)器上讀取郵件消息。但問題是筆者的ISP僅允許連接到其網(wǎng)絡(luò)機(jī)器可以訪問其pop3服務(wù)器。因?yàn)楣P者的筆記本電腦“abc”直接連接到ISP和服務(wù)器:

2、可創(chuàng)建類似于下面的一個(gè)隧道:

abc:~ jmjones$ ssh -R 8110:mail.myisp.com:110 oksir

在上面的命令中,“-R”指明這是一個(gè)反向轉(zhuǎn)發(fā),“8110”指明8110端口上監(jiān)聽并綁定之?!癿ail.myisp.com:110”指定筆記本電腦將會(huì)轉(zhuǎn)發(fā)從隧道接收的任何通信?!皁ksir”是以ssh方式連接的機(jī)器。

在運(yùn)行SSH之前,在服務(wù)器上運(yùn)行了netstat命令,顯示出沒有什么程序正在8110端口上監(jiān)聽:

jmjones@oksir:~$ netstat -an | grep 8110
jmjones@oksir:~$

筆者并沒有看到什么程序在監(jiān)聽。在筆記本電腦上運(yùn)行了ssh命令后,在服務(wù)器上運(yùn)行了同樣的命令:

jmjones@oksir:~$ netstat -an | grep 8110
tcp    0    0 127.0.0.1:8110   0.0.0.0:*     LISTEN
tcp6   0   0 ::1:8110     :::*          LISTEN

在創(chuàng)建隧道后,fetchmail可在localhost:8110上運(yùn)行,并將請(qǐng)求轉(zhuǎn)發(fā)給ISP。當(dāng)然,在筆記本電腦連接到服務(wù)器和ISP的郵件服務(wù)器時(shí),這個(gè)隧道才是活動(dòng)的。

總之,通過SSH建立隧道是實(shí)現(xiàn)安全的數(shù)據(jù)通信的一種簡單方法。同時(shí),它還是連接兩個(gè)并不直接相連的兩個(gè)網(wǎng)絡(luò)的一種簡便方法。在找出使用它的方法后,它就成為一個(gè)不可替換的好工具。

【51CTO.COM 獨(dú)家特稿,轉(zhuǎn)載請(qǐng)注明出處及作者?】

【編輯推薦】

  1. 用SSH建立安全通道
  2. SSH客戶端的安裝方法
責(zé)任編輯:許鳳麗 來源: 51CTO.com
相關(guān)推薦

2011-10-26 20:47:36

ssh 安全

2010-02-06 15:31:18

ibmdwAndroid

2009-07-22 14:55:16

ibmdwAndroid

2017-05-09 08:48:44

機(jī)器學(xué)習(xí)

2016-12-08 22:39:40

Android

2022-06-10 08:17:52

HashMap鏈表紅黑樹

2012-02-29 00:49:06

Linux學(xué)習(xí)

2025-02-24 10:07:10

2010-11-08 10:20:18

2024-02-26 08:52:20

Python傳遞函數(shù)參數(shù)參數(shù)傳遞類型

2022-09-02 15:11:18

開發(fā)工具

2023-10-13 08:23:05

2009-07-03 18:49:00

網(wǎng)吧綜合布線

2024-06-07 08:51:50

OpenPyXLPythonExcel文件

2025-03-21 14:31:14

NumPyPython數(shù)組

2017-01-09 09:34:03

Docker容器傳統(tǒng)虛擬機(jī)

2023-05-09 08:34:51

PythonWith語句

2024-01-11 09:35:12

單元測試Python編程軟件開發(fā)

2023-09-26 22:26:15

Python代碼
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)