成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

從入門到精通:構建SSH安全通道

運維 系統運維
SSH命令行實用程序是遠程系統的工作人員安全訪問的通道。SSH代表著“安全外殼”,所以你可能認為其最常用的使用方法就是用作一個遠程外殼。也許這是其最常見的應用,但并非使用SSH的唯一的有趣方法。

SSH命令行實用程序是遠程系統的工作人員安全訪問的通道。SSH代表著安全外殼,所以你可能認為其最常用的使用方法就是用作一個遠程外殼。也許這是其最常見的應用,但并非使用SSH的唯一的有趣方法。

  一、連接、執行遠程命令并使用授權密鑰

  1、創建一個連接

  為通過SSH進行通信,你首先需要建立一個到達遠程服務器的連接。使用SSH命令行實用程序時,我們有很多參數選擇。最基本的命令行參數是:

  1、SSH IP地址

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

  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 客戶端并不知道遠程服務器。筆者在這里用了客戶端,因為SSH命令行實用程序初始化了網絡并使其成為網絡客戶端。

  在上面的消息中,SSH程序還詢問作者是否希望繼續連接(Are you sure you want to continue connecting (yes/no)? )筆者的回答是“yes”,因為筆者知道這臺服務器正是筆者想連接的服務器。一般而言,對此問題回答“yes”是比較安全的。(但如果不懷好意的家伙假冒了你想連接的服務器,這樣做就危險了。)在回答“yes”繼續連接后,筆者的客戶端用下面的內容更新了文件$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^==

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

  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、口令驗證

  繼續上面的例子。在回答了“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客戶端與遠程服務器建立了一個交互連接。在此,可以看出登錄到一個Linux服務器的證據,如上次登錄的時間。

  3、授權密鑰

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

  為使用公鑰私鑰對,我們必須創建它。可通過在命令行使用ssh –keygen程序來達此目的。其實,該命令還是有許多參數的,如密鑰的類型、想要創建的文件名、密鑰文件的注釋等,不過我們完全只使用默認選項。下面是筆者在沒有使用任何參數時的結果:

  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”作為密鑰文件,還接受了不輸入任何口令短語的默認選項。如果選擇了給文件添加一個口令短語,那么在每次使用時都得輸入此短語。運行ssh-keygen的結果是在$HOME/.ssh文件中生成了兩個文件:

  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”是筆者的私鑰。筆者并不希望任何人可以訪問這個文件,以防止其他人冒充自己。注意,對“id_rsa”的限制強于對“id_rsa.pub”的限制。筆者可以將此文件傳送給希望連接的任何人。不用擔心,任何人都無法猜測我們的私鑰是什么。

#p#

如果筆者希望將此密鑰用于前面例子中的服務器,就可將公鑰的內容放到遠程服務器的“$HOME/.ssh/authorized_keys”文件中。為了設置正確,我們一般需要以SSH 方式連接到遠程服務器并將本地的“id_rsa.pub”文件復制到遠程“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:~$

  此后,在登錄時,程序就不再提示輸入口令。這里,登出服務器,然后再次以SSH方式進入:

  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

  請注意,筆者的客戶端并沒有提示要求輸入口令?,F在,只要想連接到此服務器,只要想以SSH方式登錄,便會立即連接。

  4、執行遠程命令

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

  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 地址 命令,我們可以用此法檢查磁盤的利用率,查看有哪些進程正在運行,或復制文件等。

  為什么不直接登錄然后以交互方式運行命令呢?因為這會喪失腳本的好處。從現在起,在遠程系統上執行命令成為外殼腳本的一部分。

  可以看出,SSH是一個重要的工具。就其一般的使用情況,它準許我們在遠程服務器上以交互方式管理外殼。這對于遠程系統管理來說當然是很有必要的。不過,通過使用授權密鑰,我們還可以增強認證過程的安全性。它準許我們在遠程系統上運行外殼腳本而無需處于交互式外殼中。

  二、實用安全:構建SSH安全通道

  下面我們討論一些比遠程外殼訪問或遠程執行更為有趣的內容:創建隧道。

  1、構建隧道的理由

  先談談什么是隧道。

  SSH隧道也就是用加密的SSH協議將網絡通信包裝起來的過程。隧道包括一個連接到SSH服務器的SSH客戶端。不過,在SSH客戶端連接到服務器時,客戶端指定了隧道的源和目的地。

  所謂的源也就是其它的進程可以連接的綁定網絡端口。這個端口要么由SSH客戶端,要么由SSH服務器管理。

  目的地是另外一個綁定的網絡端口,不過,這里指的是另外的一個網絡服務器,它是SSH隧道的另外一端可以與之通信的服務器。下面筆者將用一個例子更詳細地闡述之。讀者盡可以將SSH隧道看作是如同安全的端口轉發一樣的數據傳輸通道。

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

  使用SSH隧道的第二個理由是它可以加密網絡通信。在IMAP的例子中,使用SSH的另外一個好處是電子郵件數據是加密的。在你與親朋好友通信時,這些通信數據在通過互聯網上的隧道傳輸時是很安全的。不過,在這種通信進入隧道之前和離開隧道后它并沒有經過加密。

  使用SSH時,有兩種安全的端口轉發:本地轉發和遠程轉發。對于本地轉發而言,SSH客戶端管理源端口。對于遠程轉發而言,SSH服務器管理源端口。你選擇的是本地或遠程轉發都依賴于哪個系統發起連接,哪個系統在其上擁有SSH服務器,你在哪里需要隧道的源地址。

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

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

  注意,這里的“-L”參數指明了這是一種本地轉發。而“8143”指明了筆者希望將127.0.0.1:8143綁定為隧道源。“localhost:143”指明了要將通信轉發到何處。雖然在遠程端上指明為“localhost”,但也可以指定遠程系統可以與之通信的任何地址和端口。最后,“oksir”指明了筆者希望以SSH方式進入的機器。

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

  abc:~ jmjones$ netstat -an | grep 8143

  abc:~ jmjones$

  根據運行的結果可知沒有什么正在監聽,在創建隧道之后,再次運行netstat命令,這時看到了不同的結果:

  abc:~ jmjones$ netstat -an | grep 8143

  tcp4 0 0 127.0.0.1.8143 *.* LISTEN

  tcp6 0 0 ::1.8143

  從上面的netstat命令的運行結果可以看出,SSH客戶端上的某程序正在127.0.0.1(本地的循環網絡設備)8143端口上監聽。任何與127.0.0.1:8143的連接都將被轉發給“oksir”上的localhost143端口上。在創建隧道后,需要在筆記本電腦的電子郵件客戶端上配置一個賬戶,在locahos8143上找一個IMAP服務器,并開始在“oksir”上讀郵件。

  現在,我們假定服務器“oksir”使用fetchmail,并從ISPpop3服務器上讀取郵件消息。但問題是筆者的ISP僅允許連接到其網絡機器可以訪問其pop3服務器。因為筆者的筆記本電腦“abc”直接連接到ISP和服務器:

  2、可創建類似于下面的一個隧道:

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

  在上面的命令中,“-R”指明這是一個反向轉發,“8110”指明8110端口上監聽并綁定之。“mail.myisp.com:110”指定筆記本電腦將會轉發從隧道接收的任何通信。“oksir”是以ssh方式連接的機器。

  在運行SSH之前,在服務器上運行了netstat命令,顯示出沒有什么程序正在8110端口上監聽:

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

  jmjones@oksir:~$

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

  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

  在創建隧道后,fetchmail可在localhost:8110上運行,并將請求轉發給ISP。當然,在筆記本電腦連接到服務器和ISP的郵件服務器時,這個隧道才是活動的。

  總之,通過SSH建立隧道是實現安全的數據通信的一種簡單方法。同時,它還是連接兩個并不直接相連的兩個網絡的一種簡便方法。在找出使用它的方法后,它就成為一個不可替換的好工具。

 

責任編輯:春曉 來源: 計世網
相關推薦

2009-03-19 13:36:53

SSH安全通道遠程

2010-02-06 15:31:18

ibmdwAndroid

2009-07-22 14:55:16

ibmdwAndroid

2016-12-08 22:39:40

Android

2017-05-09 08:48:44

機器學習

2022-06-10 08:17:52

HashMap鏈表紅黑樹

2012-02-29 00:49:06

Linux學習

2025-02-24 10:07:10

2024-02-26 08:52:20

Python傳遞函數參數參數傳遞類型

2010-11-08 10:20:18

2022-09-02 15:11:18

開發工具

2023-10-13 08:23:05

2009-07-03 18:49:00

網吧綜合布線

2024-06-07 08:51:50

OpenPyXLPythonExcel文件

2025-03-21 14:31:14

NumPyPython數組

2017-01-09 09:34:03

Docker容器傳統虛擬機

2023-05-09 08:34:51

PythonWith語句

2024-01-11 09:35:12

單元測試Python編程軟件開發

2011-06-07 10:33:11

Android Activity

2010-09-25 11:51:39

無線路由器
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 中文字幕动漫成人 | 玖玖操| 婷婷久久精品一区二区 | 国产精品一区二区无线 | 精品日韩一区二区三区av动图 | 九九久久精品 | 亚洲国产欧美一区 | 日韩视频在线观看 | 久久久久久久久久久久91 | 欧美一区二区 | 精品一区二区三区在线观看 | 欧美精品中文字幕久久二区 | 日本久草| 午夜国产在线 | 欧美二区三区 | 久久亚洲精品国产精品紫薇 | 欧美日韩精品在线免费观看 | 国产成人高清 | 成人欧美日韩一区二区三区 | 天天射网站 | 日本精品视频在线 | 亚洲天堂中文字幕 | 午夜影院在线观看 | 亚洲成av| 国产精品国产精品国产专区不卡 | 国产韩国精品一区二区三区 | 国产欧美日韩在线 | 国产黄色网 | 婷婷综合色| 国产日韩欧美精品一区二区三区 | 精品久久久久国产免费第一页 | 国产欧美精品一区二区三区 | 韩国久久精品 | 浮生影院免费观看中文版 | 亚洲欧美综合精品久久成人 | 国产精品久久久久久久久久三级 | 久久久国产一区二区三区 | 国产精品a久久久久 | 成人免费视频网站在线观看 | 欧美激情亚洲激情 | 天天操夜夜爽 |