在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ Linux/ 網(wǎng)絡(luò)系統(tǒng)
網(wǎng)絡(luò)系統(tǒng)
打印
重定向
使用命令
位置參數(shù)
權(quán)限
文本處理
疑難排解
layout: book-zh title: 自定制 shell 提示符
查找文件
layout: book-zh title: vi 簡(jiǎn)介
shell 環(huán)境
什么是 shell
編譯程序
鍵盤高級(jí)操作技巧
流程控制:case 分支
流程控制:if 分支結(jié)構(gòu)
layout: book-zh title: 軟件包管理
進(jìn)程
存儲(chǔ)媒介
格式化輸出
編寫第一個(gè) Shell 腳本
啟動(dòng)一個(gè)項(xiàng)目
流程控制:while/until 循環(huán)
文件系統(tǒng)中跳轉(zhuǎn)
字符串和數(shù)字
讀取鍵盤輸入
歸檔和備份
探究操作系統(tǒng)
流程控制:for 循環(huán)
自頂向下設(shè)計(jì)
數(shù)組
操作文件和目錄
奇珍異寶
從 shell 眼中看世界
正則表達(dá)式

網(wǎng)絡(luò)系統(tǒng)

當(dāng)談及到網(wǎng)絡(luò)系統(tǒng)層面,幾乎任何東西都能由 Linux 來實(shí)現(xiàn)。Linux 被用來創(chuàng)建各式各樣的網(wǎng)絡(luò)系統(tǒng)和裝置, 包括防火墻,路由器,名稱服務(wù)器,網(wǎng)絡(luò)連接式存儲(chǔ)設(shè)備等等。

被用來配置和操作網(wǎng)絡(luò)系統(tǒng)的命令數(shù)目,就如網(wǎng)絡(luò)系統(tǒng)一樣巨大。我們僅僅會(huì)關(guān)注一些最經(jīng)常 使用到的命令。我們要研究的命令包括那些被用來監(jiān)測(cè)網(wǎng)絡(luò)和傳輸文件的命令。另外,我們 還會(huì)探討用來遠(yuǎn)端登錄的 ssh 程序。這章會(huì)介紹:

  • ping - 發(fā)送 ICMP ECHO_REQUEST 軟件包到網(wǎng)絡(luò)主機(jī)

  • traceroute - 打印到一臺(tái)網(wǎng)絡(luò)主機(jī)的路由數(shù)據(jù)包

  • netstat - 打印網(wǎng)絡(luò)連接,路由表,接口統(tǒng)計(jì)數(shù)據(jù),偽裝連接,和多路廣播成員

  • ftp - 因特網(wǎng)文件傳輸程序

  • wget - 非交互式網(wǎng)絡(luò)下載器

  • ssh - OpenSSH SSH 客戶端(遠(yuǎn)程登錄程序)

我們假定你已經(jīng)知道了一點(diǎn)網(wǎng)絡(luò)系統(tǒng)背景知識(shí)。在這個(gè)因特網(wǎng)時(shí)代,每個(gè)計(jì)算機(jī)用戶需要理解基本的網(wǎng)絡(luò) 系統(tǒng)概念。為了能夠充分利用這一章節(jié)的內(nèi)容,我們應(yīng)該熟悉以下術(shù)語(yǔ):

  • IP (網(wǎng)絡(luò)協(xié)議)地址

  • 主機(jī)和域名

  • URI(統(tǒng)一資源標(biāo)識(shí)符)

請(qǐng)查看下面的“拓展閱讀”部分,有幾篇關(guān)于這些術(shù)語(yǔ)的有用文章。


注意:一些將要講到的命令可能(取決于系統(tǒng)發(fā)行版)需要從系統(tǒng)發(fā)行版的倉(cāng)庫(kù)中安裝額外的軟件包, 并且一些命令可能需要超級(jí)用戶權(quán)限才能執(zhí)行。


檢查和監(jiān)測(cè)網(wǎng)絡(luò)

即使你不是一名系統(tǒng)管理員,檢查一個(gè)網(wǎng)絡(luò)的性能和運(yùn)作情況也是經(jīng)常有幫助的。

ping

最基本的網(wǎng)絡(luò)命令是 ping。這個(gè) ping 命令發(fā)送一個(gè)特殊的網(wǎng)絡(luò)數(shù)據(jù)包,叫做 IMCP ECHO_REQUEST,到 一臺(tái)指定的主機(jī)。大多數(shù)接收這個(gè)包的網(wǎng)絡(luò)設(shè)備將會(huì)回復(fù)它,來允許網(wǎng)絡(luò)連接驗(yàn)證。


注意:大多數(shù)網(wǎng)絡(luò)設(shè)備(包括 Linux 主機(jī))都可以被配置為忽略這些數(shù)據(jù)包。通常,這樣做是出于網(wǎng)絡(luò)安全 原因,部分地遮蔽一臺(tái)主機(jī)免受一個(gè)潛在攻擊者地侵襲。配置防火墻來阻塞 IMCP 流量也很普遍。


例如,看看我們能否連接到網(wǎng)站 linuxcommand.org(我們最喜歡的網(wǎng)站之一), 我們可以這樣使用 ping 命令:

[me@linuxbox ~]$ ping linuxcommand.org

一旦啟動(dòng),ping 命令會(huì)持續(xù)在特定的時(shí)間間隔內(nèi)(默認(rèn)是一秒)發(fā)送數(shù)據(jù)包,直到它被中斷:

[me@linuxbox ~]$ ping linuxcommand.org
PING linuxcommand.org (66.35.250.210) 56(84) bytes of data.
64 bytes from vhost.sourceforge.net (66.35.250.210): icmp\_seq=1
ttl=43 time=107 ms
64 bytes from vhost.sourceforge.net (66.35.250.210): icmp\_seq=2
ttl=43 time=108 ms
64 bytes from vhost.sourceforge.net (66.35.250.210): icmp\_seq=3
ttl=43 time=106 ms
64 bytes from vhost.sourceforge.net (66.35.250.210): icmp\_seq=4
ttl=43 time=106 ms
64 bytes from vhost.sourceforge.net (66.35.250.210): icmp\_seq=5
ttl=43 time=105 ms
...

按下組合鍵 Ctrl-c,中斷這個(gè)命令之后,ping 打印出運(yùn)行統(tǒng)計(jì)信息。一個(gè)正常工作的網(wǎng)絡(luò)會(huì)報(bào)告 零個(gè)數(shù)據(jù)包丟失。一個(gè)成功執(zhí)行的“ping”命令會(huì)意味著網(wǎng)絡(luò)的各個(gè)部件(網(wǎng)卡,電纜,路由,網(wǎng)關(guān)) 都處于正常的工作狀態(tài)。

traceroute

這個(gè) traceroute 程序(一些系統(tǒng)使用相似的 tracepath 程序來代替)會(huì)顯示從本地到指定主機(jī) 要經(jīng)過的所有“跳數(shù)”的網(wǎng)絡(luò)流量列表。例如,看一下到達(dá) slashdot.org 網(wǎng)站,需要經(jīng)過的路由 器,我們將這樣做:

[me@linuxbox ~]$ traceroute slashdot.org

命令輸出看起來像這樣:

traceroute to slashdot.org (216.34.181.45), 30 hops max, 40 byte
packets
1 ipcop.localdomain (192.168.1.1) 1.066 ms 1.366 ms 1.720 ms
2 * * *
3 ge-4-13-ur01.rockville.md.bad.comcast.net (68.87.130.9) 14.622
ms 14.885 ms 15.169 ms
4 po-30-ur02.rockville.md.bad.comcast.net (68.87.129.154) 17.634
ms 17.626 ms 17.899 ms
5 po-60-ur03.rockville.md.bad.comcast.net (68.87.129.158) 15.992
ms 15.983 ms 16.256 ms
6 po-30-ar01.howardcounty.md.bad.comcast.net (68.87.136.5) 22.835
...

從輸出結(jié)果中,我們可以看到連接測(cè)試系統(tǒng)到 slashdot.org 網(wǎng)站需要經(jīng)由16個(gè)路由器。對(duì)于那些 提供標(biāo)識(shí)信息的路由器,我們能看到它們的主機(jī)名,IP 地址和性能數(shù)據(jù),這些數(shù)據(jù)包括三次從本地到 此路由器的往返時(shí)間樣本。對(duì)于那些沒有提供標(biāo)識(shí)信息的路由器(由于路由器配置,網(wǎng)絡(luò)擁塞,防火墻等 方面的原因),我們會(huì)看到幾個(gè)星號(hào),正如行中所示。

netstat

netstat 程序被用來檢查各種各樣的網(wǎng)絡(luò)設(shè)置和統(tǒng)計(jì)數(shù)據(jù)。通過此命令的許多選項(xiàng),我們 可以看看網(wǎng)絡(luò)設(shè)置中的各種特性。使用“-ie”選項(xiàng),我們能夠查看系統(tǒng)中的網(wǎng)絡(luò)接口:

[me@linuxbox ~]$ netstat -ie
eth0    Link encap:Ethernet HWaddr 00:1d:09:9b:99:67
        inet addr:192.168.1.2 Bcast:192.168.1.255 Mask:255.255.255.0
        inet6 addr: fe80::21d:9ff:fe9b:9967/64 Scope:Link
        UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
        RX packets:238488 errors:0 dropped:0 overruns:0 frame:0
        TX packets:403217 errors:0 dropped:0 overruns:0 carrier:0
        collisions:0 txqueuelen:100 RX bytes:153098921 (146.0 MB) TX
        bytes:261035246 (248.9 MB) Memory:fdfc0000-fdfe0000

lo      Link encap:Local Loopback
        inet addr:127.0.0.1 Mask:255.0.0.0
...

在上述實(shí)例中,我們看到我們的測(cè)試系統(tǒng)有兩個(gè)網(wǎng)絡(luò)接口。第一個(gè),叫做 eth0,是 因特網(wǎng)接口,和第二個(gè),叫做 lo,是內(nèi)部回環(huán)網(wǎng)絡(luò)接口,它是一個(gè)虛擬接口,系統(tǒng)用它來 “自言自語(yǔ)”。

當(dāng)執(zhí)行日常網(wǎng)絡(luò)診斷時(shí),要查看的重要信息是每個(gè)網(wǎng)絡(luò)接口第四行開頭出現(xiàn)的單詞 “UP”,說明這個(gè)網(wǎng)絡(luò)接口已經(jīng)生效,還要查看第二行中 inet addr 字段出現(xiàn)的有效 IP 地址。對(duì)于使用 DHCP(動(dòng)態(tài)主機(jī)配置協(xié)議)的系統(tǒng),在 這個(gè)字段中的一個(gè)有效 IP 地址則證明了 DHCP 工作正常。

使用這個(gè)“-r”選項(xiàng)會(huì)顯示內(nèi)核的網(wǎng)絡(luò)路由表。這展示了系統(tǒng)是如何配置網(wǎng)絡(luò)之間發(fā)送數(shù)據(jù)包的。

[me@linuxbox ~]$ netstat -r
Kernel IP routing table
Destination     Gateway     Genmask         Flags    MSS  Window  irtt Iface

192.168.1.0     *           255.255.255.0   U        0    0          0 eth0
default         192.168.1.1 0.0.0.0         UG       0    0          0 eth0

在這個(gè)簡(jiǎn)單的例子里面,我們看到了,位于防火墻之內(nèi)的局域網(wǎng)中,一臺(tái)客戶端計(jì)算機(jī)的典型路由表。 第一行顯示了目的地 192.168.1.0。IP 地址以零結(jié)尾是指網(wǎng)絡(luò),而不是個(gè)人主機(jī), 所以這個(gè)目的地意味著局域網(wǎng)中的任何一臺(tái)主機(jī)。下一個(gè)字段,Gateway, 是網(wǎng)關(guān)(路由器)的名字或 IP 地址,用它來連接當(dāng)前的主機(jī)和目的地的網(wǎng)絡(luò)。 若這個(gè)字段顯示一個(gè)星號(hào),則表明不需要網(wǎng)關(guān)。

最后一行包含目的地 default。指的是發(fā)往任何表上沒有列出的目的地網(wǎng)絡(luò)的流量。 在我們的實(shí)例中,我們看到網(wǎng)關(guān)被定義為地址 192.168.1.1 的路由器,它應(yīng)該能 知道怎樣來處理目的地流量。

netstat 程序有許多選項(xiàng),我們僅僅討論了幾個(gè)。查看 netstat 命令的手冊(cè),可以 得到所有選項(xiàng)的完整列表。

網(wǎng)絡(luò)中傳輸文件

網(wǎng)絡(luò)有什么用處呢?除非我們知道了怎樣通過網(wǎng)絡(luò)來傳輸文件。有許多程序可以用來在網(wǎng)絡(luò)中 傳送數(shù)據(jù)。我們先討論兩個(gè)命令,隨后的章節(jié)里再介紹幾個(gè)命令。

ftp

ftp 命令屬于真正的“經(jīng)典”程序之一,它的名字來源于其所使用的協(xié)議,就是文件傳輸協(xié)議。 FTP 被廣泛地用來從因特網(wǎng)上下載文件。大多數(shù),并不是所有的,網(wǎng)絡(luò)瀏覽器都支持 FTP, 你經(jīng)??梢钥吹剿鼈兊?URI 以協(xié)議 ftp://開頭。在出現(xiàn)網(wǎng)絡(luò)瀏覽器之前,ftp 程序已經(jīng)存在了。 ftp 程序可用來與 FTP 服務(wù)器進(jìn)行通信,F(xiàn)TP 服務(wù)器就是存儲(chǔ)文件的計(jì)算機(jī),這些文件能夠通過 網(wǎng)絡(luò)下載和上傳。

FTP(它的原始形式)并不是安全的,因?yàn)樗鼤?huì)以明碼形式發(fā)送帳號(hào)的姓名和密碼。這就意味著 這些數(shù)據(jù)沒有加密,任何嗅探網(wǎng)絡(luò)的人都能看到。由于此種原因,幾乎因特網(wǎng)中所有 FTP 服務(wù)器 都是匿名的。一個(gè)匿名服務(wù)器能允許任何人使用注冊(cè)名“anonymous”和無(wú)意義的密碼登錄系統(tǒng)。

在下面的例子中,我們將展示一個(gè)典型的會(huì)話,從匿名 FTP 服務(wù)器,其名字是 fileserver, 的/pub/_images/Ubuntu-8.04的目錄下,使用 ftp 程序下載一個(gè) Ubuntu 系統(tǒng)映像文件。

[me@linuxbox ~]$ ftp fileserver
Connected to fileserver.localdomain.
220 (vsFTPd 2.0.1)
Name (fileserver:me): anonymous
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> cd pub/cd\_images/Ubuntu-8.04
250 Directory successfully changed.
ftp> ls
200 PORT command successful. Consider using PASV.
150 Here comes the directory listing.
-rw-rw-r-- 1 500 500 733079552 Apr 25 03:53 ubuntu-8.04- desktop-i386.iso
226 Directory send OK.
ftp> lcd Desktop
Local directory now /home/me/Desktop
ftp> get ubuntu-8.04-desktop-i386.iso
local: ubuntu-8.04-desktop-i386.iso remote: ubuntu-8.04-desktop-
i386.iso
200 PORT command successful. Consider using PASV.
150 Opening BINARY mode data connection for ubuntu-8.04-desktop-
i386.iso (733079552 bytes).
226 File send OK.
733079552 bytes received in 68.56 secs (10441.5 kB/s)
ftp> bye

這里是對(duì)會(huì)話期間所輸入命令的解釋說明:

表17-1:
命令 意思
ftp fileserver 喚醒 ftp 程序,讓它連接到 FTP 服務(wù)器,fileserver。
anonymous 登錄名。輸入登錄名后,將出現(xiàn)一個(gè)密碼提示。一些服務(wù)器將會(huì)接受空密碼, 其它一些則會(huì)要求一個(gè)郵件地址形式的密碼。如果是這種情況,試著輸入 “user@example.com”。
cd pub/cd_images/Ubuntu-8.04 跳轉(zhuǎn)到遠(yuǎn)端系統(tǒng)中,要下載文件所在的目錄下, 注意在大多數(shù)匿名的 FTP 服務(wù)器中,支持公共下載的文件都能在目錄 pub 下找到
ls 列出遠(yuǎn)端系統(tǒng)中的目錄。
lcd Desktop 跳轉(zhuǎn)到本地系統(tǒng)中的 ~/Desktop 目錄下。在實(shí)例中,ftp 程序在工作目錄 ~ 下被喚醒。 這個(gè)命令把工作目錄改為 ~/Desktop
get ubuntu-8.04-desktop-i386.iso 告訴遠(yuǎn)端系統(tǒng)傳送文件到本地。因?yàn)楸镜叵到y(tǒng)的工作目錄 已經(jīng)更改到了 ~/Desktop,所以文件會(huì)被下載到此目錄。
bye 退出遠(yuǎn)端服務(wù)器,結(jié)束 ftp 程序會(huì)話。也可以使用命令 quit 和 exit。

在 “ftp>” 提示符下,輸入 “help”,會(huì)顯示所支持命令的列表。使用 ftp 登錄到一臺(tái) 授予了用戶足夠權(quán)限的服務(wù)器中,則可以執(zhí)行很多普通的文件管理任務(wù)。雖然很笨拙, 但它真能工作。

lftp - 更好的 ftp

ftp 并不是唯一的命令行形式的 FTP 客戶端。實(shí)際上,還有很多。其中比較好(也更流行的)是 lftp 程序, 由 Alexander Lukyanov 編寫完成。雖然 lftp 工作起來與傳統(tǒng)的 ftp 程序很相似,但是它帶有額外的便捷特性,包括 多協(xié)議支持(包括 HTTP),若下載失敗會(huì)自動(dòng)地重新下載,后臺(tái)處理,用 tab 按鍵來補(bǔ)全路徑名,還有很多。

wget

另一個(gè)流行的用來下載文件的命令行程序是 wget。若想從網(wǎng)絡(luò)和 FTP 網(wǎng)站兩者上都能下載數(shù)據(jù),wget 是很有用處的。 不只能下載單個(gè)文件,多個(gè)文件,甚至整個(gè)網(wǎng)站都能下載。下載 linuxcommand.org 網(wǎng)站的首頁(yè), 我們可以這樣做:

[me@linuxbox ~]$ wget http://linuxcommand.org/index.php
--11:02:51-- http://linuxcommand.org/index.php
        => `index.php'
Resolving linuxcommand.org... 66.35.250.210
Connecting to linuxcommand.org|66.35.250.210|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: unspecified [text/html]

  [ <                        => ]        3,120       --.--K/s

11:02:51 (161.75 MB/s) - 'index.php' saved [3120]

這個(gè)程序的許多選項(xiàng)允許 wget 遞歸地下載,在后臺(tái)下載文件(你退出后仍在下載),能完成未下載 全的文件。這些特性在命令手冊(cè),better-than-average 一節(jié)中有詳盡地說明。

與遠(yuǎn)程主機(jī)安全通信

通過網(wǎng)絡(luò)來遠(yuǎn)程操控類 Unix 的操作系統(tǒng)已經(jīng)有很多年了。早些年,在因特網(wǎng)普遍推廣之前,有 一些受歡迎的程序被用來登錄遠(yuǎn)程主機(jī)。它們是 rlogin 和 telnet 程序。然而這些程序,擁有和 ftp 程序 一樣的致命缺點(diǎn);它們以明碼形式來傳輸所有的交流信息(包括登錄命令和密碼)。這使它們完全不 適合使用在因特網(wǎng)時(shí)代。

ssh

為了解決這個(gè)問題,開發(fā)了一款新的協(xié)議,叫做 SSH(Secure Shell)。 SSH 解決了這兩個(gè)基本的和遠(yuǎn)端主機(jī)安全交流的問題。首先,它要認(rèn)證遠(yuǎn)端主機(jī)是否為它 所知道的那臺(tái)主機(jī)(這樣就阻止了所謂的“中間人”的攻擊),其次,它加密了本地與遠(yuǎn)程主機(jī)之間 所有的通訊信息。

SSH 由兩部分組成。SSH 服務(wù)器運(yùn)行在遠(yuǎn)端主機(jī)上運(yùn)行,在端口號(hào)22上監(jiān)聽將要到來的連接,而 SSH 客戶端用在本地系統(tǒng)中,用來和遠(yuǎn)端服務(wù)器通信。

大多數(shù) Linux 發(fā)行版自帶一個(gè)提供 SSH 功能的軟件包,叫做 OpenSSH,來自于 BSD 項(xiàng)目。一些發(fā)行版 默認(rèn)包含客戶端和服務(wù)器端兩個(gè)軟件包(例如,Red Hat),而另一些(比方說 Ubuntu)則只是提供客戶端服務(wù)。為了能讓系統(tǒng)接受遠(yuǎn)端的連接,它必須 安裝 OpenSSH-server 軟件包,配置,運(yùn)行它,并且(如果系統(tǒng)正在運(yùn)行,或者是在防火墻之后) 它必須允許在 TCP 端口號(hào)上接收網(wǎng)絡(luò)連接。


小貼示:如果你沒有遠(yuǎn)端系統(tǒng)去連接,但還想試試這些實(shí)例,則確認(rèn)安裝了 OpenSSH-server 軟件包 ,則可使用 localhost 作為遠(yuǎn)端主機(jī)的名字。這種情況下,計(jì)算機(jī)會(huì)和它自己創(chuàng)建網(wǎng)絡(luò)連接。


用來與遠(yuǎn)端 SSH 服務(wù)器相連接的 SSH 客戶端程序,順理成章,叫做 ssh。連接到遠(yuǎn)端名為 remote-sys 的主機(jī),我們可以這樣使用 ssh 客戶端程序:

[me@linuxbox ~]$ ssh remote-sys
The authenticity of host 'remote-sys (192.168.1.4)' can't be
established.
RSA key fingerprint is
41:ed:7a:df:23:19:bf:3c:a5:17:bc:61:b3:7f:d9:bb.
Are you sure you want to continue connecting (yes/no)?

第一次嘗試連接,提示信息表明遠(yuǎn)端主機(jī)的真實(shí)性不能確立。這是因?yàn)榭蛻舳顺绦蛞郧皬臎]有 看到過這個(gè)遠(yuǎn)端主機(jī)。為了接受遠(yuǎn)端主機(jī)的身份驗(yàn)證憑據(jù),輸入“yes”。一旦建立了連接,會(huì)提示 用戶輸入他或她的密碼:

Warning: Permanently added 'remote-sys,192.168.1.4' (RSA) to the list
of known hosts.
me@remote-sys's password:

成功地輸入密碼之后,我們會(huì)接收到遠(yuǎn)端系統(tǒng)的 shell 提示符:

Last login: Sat Aug 30 13:00:48 2008
[me@remote-sys ~]$

遠(yuǎn)端 shell 會(huì)話一直存在,直到用戶輸入 exit 命令后,則關(guān)閉了遠(yuǎn)程連接。這時(shí)候,本地的 shell 會(huì)話 恢復(fù),本地 shell 提示符重新出現(xiàn)。

也有可能使用不同的用戶名連接到遠(yuǎn)程系統(tǒng)。例如,如果本地用戶“me”,在遠(yuǎn)端系統(tǒng)中有一個(gè)帳號(hào)名 “bob”,則用戶 me 能夠用 bob 帳號(hào)登錄到遠(yuǎn)端系統(tǒng),如下所示:

[me@linuxbox ~]$ ssh bob@remote-sys
bob@remote-sys's password:
Last login: Sat Aug 30 13:03:21 2008
[bob@remote-sys ~]$

正如之前所講到的,ssh 驗(yàn)證遠(yuǎn)端主機(jī)的真實(shí)性。如果遠(yuǎn)端主機(jī)不能成功地通過驗(yàn)證,則會(huì)提示以下信息:

[me@linuxbox ~]$ ssh remote-sys
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@
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)!
...

有兩種可能的情形會(huì)提示這些信息。第一,某個(gè)攻擊者企圖制造“中間人”襲擊。這很少見, 因?yàn)槊總€(gè)人都知道 ssh 會(huì)針對(duì)這種狀況發(fā)出警告。最有可能的罪魁禍?zhǔn)资沁h(yuǎn)端系統(tǒng)已經(jīng)改變了; 例如,它的操作系統(tǒng)或者是 SSH 服務(wù)器重新安裝了。然而,為了安全起見,第一個(gè)可能性不應(yīng)該 被輕易否定。當(dāng)這條消息出現(xiàn)時(shí),總要與遠(yuǎn)端系統(tǒng)的管理員查對(duì)一下。

當(dāng)確定了這條消息歸結(jié)為一個(gè)良性的原因之后,那么在客戶端更正問題就很安全了。 使用文本編輯器(可能是 vim)從文件~/.ssh/known_hosts 中刪除廢棄的鑰匙, 就解決了問題。在上面的例子里,我們看到這樣一句話:

Offending key in /home/me/.ssh/known_hosts:1

這意味著文件 known_hosts 里面某一行包含攻擊型的鑰匙。從文件中刪除這一行,則 ssh 程序 就能夠從遠(yuǎn)端系統(tǒng)接受新的身份驗(yàn)證憑據(jù)。

除了能夠在遠(yuǎn)端系統(tǒng)中打開一個(gè) shell 會(huì)話,ssh 程序也允許我們?cè)谶h(yuǎn)端系統(tǒng)中執(zhí)行單個(gè)命令。 例如,在名為 remote-sys 的遠(yuǎn)端主機(jī)上,執(zhí)行 free 命令,并把輸出結(jié)果顯示到本地系統(tǒng) shell 會(huì)話中。

[me@linuxbox ~]$ ssh remote-sys free
me@twin4's password:
            total   used       free     shared buffers cached

Mem:        775536  507184   268352          0  110068 154596

-/+ buffers/cache: 242520  533016
Swap: 0 1572856 0 110068 154596

[me@linuxbox ~]$

有可能以更有趣的方式來利用這項(xiàng)技術(shù),比方說下面的例子,我們?cè)谶h(yuǎn)端系統(tǒng)中執(zhí)行 ls 命令, 并把命令輸出重定向到本地系統(tǒng)中的一個(gè)文件里面。

[me@linuxbox ~]$ ssh remote-sys 'ls \*' > dirlist.txt
me@twin4's password:
[me@linuxbox ~]$

注意,上面的例子中使用了單引號(hào)。這樣做是因?yàn)槲覀儾幌肼窂矫归_操作在本地執(zhí)行 ;而希望 它在遠(yuǎn)端系統(tǒng)中被執(zhí)行。同樣地,如果我們想要把輸出結(jié)果重定向到遠(yuǎn)端主機(jī)的文件中,我們可以 把重定向操作符和文件名都放到單引號(hào)里面。

[me@linuxbox ~]$ ssh remote-sys 'ls * > dirlist.txt'

SSH 通道

當(dāng)你通過 SSH 協(xié)議與遠(yuǎn)端主機(jī)建立連接的時(shí)候,其中發(fā)生的事就是在本地與遠(yuǎn)端系統(tǒng)之間 創(chuàng)建了一條加密通道。通常,這條通道被用來把在本地系統(tǒng)中輸入的命令安全地傳輸?shù)竭h(yuǎn)端系統(tǒng), 同樣地,再把執(zhí)行結(jié)果安全地發(fā)送回來。除了這個(gè)基本功能之外,SSH 協(xié)議允許大多數(shù) 網(wǎng)絡(luò)流量類型通過這條加密通道來被傳送,在本地與遠(yuǎn)端系統(tǒng)之間創(chuàng)建某種 VPN(虛擬專用網(wǎng)絡(luò))。

可能這個(gè)特性的最普遍使用是允許傳遞 X 窗口系統(tǒng)流量。在運(yùn)行著 X 服務(wù)器(也就是, 能顯示 GUI 的機(jī)器)的系統(tǒng)中,有可能在遠(yuǎn)端啟動(dòng)和運(yùn)行一個(gè) X 客戶端程序(一個(gè)圖形化應(yīng)用程序), 而應(yīng)用程序的顯示結(jié)果出現(xiàn)在本地。這很容易完成,這里有個(gè)例子:假設(shè)我們正坐在一臺(tái)裝有 Linux 系統(tǒng), 叫做 linuxbox 的機(jī)器之前,且系統(tǒng)中運(yùn)行著 X 服務(wù)器,現(xiàn)在我們想要在名為 remote-sys 的遠(yuǎn)端系統(tǒng)中 運(yùn)行 xload 程序,但是要在我們的本地系統(tǒng)中看到這個(gè)程序的圖形化輸出。我們可以這樣做:

[me@linuxbox ~]$ ssh -X remote-sys
me@remote-sys's password:
Last login: Mon Sep 08 13:23:11 2008
[me@remote-sys ~]$ xload

這個(gè) xload 命令在遠(yuǎn)端執(zhí)行之后,它的窗口就會(huì)出現(xiàn)在本地。在某些系統(tǒng)中,你可能需要 使用 “-Y” 選項(xiàng),而不是 “-X” 選項(xiàng)來完成這個(gè)操作。

scp 和 sftp

這個(gè) OpenSSH 軟件包也包含兩個(gè)程序,它們可以利用 SSH 加密通道在網(wǎng)絡(luò)間復(fù)制文件。 第一個(gè),scp(安全復(fù)制)被用來復(fù)制文件,與熟悉的 cp 程序非常相似。最顯著的區(qū)別就是 源或者目標(biāo)路徑名要以遠(yuǎn)端主機(jī)的名字,后跟一個(gè)冒號(hào)字符開頭。例如,如果我們想要 從遠(yuǎn)端系統(tǒng),remote-sys,的家目錄下復(fù)制文檔 document.txt,到我們本地系統(tǒng)的當(dāng)前工作目錄下, 可以這樣操作:

[me@linuxbox ~]$ scp remote-sys:document.txt .
me@remote-sys's password:
document.txt
100%        5581        5.5KB/s         00:00
[me@linuxbox ~]$

和 ssh 命令一樣,如果你所期望的遠(yuǎn)端主機(jī)帳戶與你本地系統(tǒng)中的不一致, 則可以把用戶名添加到遠(yuǎn)端主機(jī)名的開頭。

[me@linuxbox ~]$ scp bob@remote-sys:document.txt .

第二個(gè) SSH 文件復(fù)制命令是 sftp,正如其名字所示,它是 ftp 程序的安全替代品。sftp 工作起來與我們 之前使用的 ftp 程序很相似;然而,它不用明碼形式來傳遞數(shù)據(jù),它使用加密的 SSH 通道。sftp 有一個(gè) 重要特性強(qiáng)于傳統(tǒng)的 ftp 命令,就是 sftp 不需要遠(yuǎn)端系統(tǒng)中運(yùn)行 FTP 服務(wù)器。它僅僅要求 SSH 服務(wù)器。 這意味著任何一臺(tái)能用 SSH 客戶端連接的遠(yuǎn)端機(jī)器,也可當(dāng)作類似于 FTP 的服務(wù)器來使用。 這里是一個(gè)樣本會(huì)話:

[me@linuxbox ~]$ sftp remote-sys
Connecting to remote-sys...
me@remote-sys's password:
sftp> ls
ubuntu-8.04-desktop-i386.iso
sftp> lcd Desktop
sftp> get ubuntu-8.04-desktop-i386.iso
Fetching /home/me/ubuntu-8.04-desktop-i386.iso to ubuntu-8.04-
desktop-i386.iso
/home/me/ubuntu-8.04-desktop-i386.iso 100% 699MB 7.4MB/s 01:35
sftp> bye

小貼示:這個(gè) SFTP 協(xié)議被許多 Linux 發(fā)行版中的圖形化文件管理器支持。使用 Nautilus (GNOME), 或者是 Konqueror (KDE),我們都能在位置欄中輸入以 sftp:// 開頭的 URI, 來操作存儲(chǔ)在運(yùn)行著 SSH 服務(wù)器的遠(yuǎn)端系統(tǒng)中的文件。


Windows 中的 SSH 客戶端

比方說你正坐在一臺(tái) Windows 機(jī)器前面,但是你需要登錄到你的 Linux 服務(wù)器中,去完成 一些實(shí)際的工作,那該怎么辦呢?當(dāng)然是得到一個(gè) Windows 平臺(tái)下的 SSH 客戶端!有很多這樣 的工具。最流行的可能就是由 Simon Tatham 和他的團(tuán)隊(duì)開發(fā)的 PuTTY 了。這個(gè) PuTTY 程序 能夠顯示一個(gè)終端窗口,而且允許 Windows 用戶在遠(yuǎn)端主機(jī)中打開一個(gè) SSH(或者 telnet)會(huì)話。 這個(gè)程序也提供了 scp 和 sftp 程序的類似物。

PuTTY 可在鏈接 http://www.chiark.greenend.org.uk/~sgtatham/putty/ 處得到。

拓展閱讀