當(dāng)談及到網(wǎng)絡(luò)系統(tǒng)層面,幾乎任何東西都能由 Linux 來實(shí)現(xiàn)。Linux 被用來創(chuàng)建各式各樣的網(wǎng)絡(luò)系統(tǒng)和裝置, 包括防火墻,路由器,名稱服務(wù)器,網(wǎng)絡(luò)連接式存儲設(shè)備等等。
被用來配置和操作網(wǎng)絡(luò)系統(tǒng)的命令數(shù)目,就如網(wǎng)絡(luò)系統(tǒng)一樣巨大。我們僅僅會關(guān)注一些最經(jīng)常 使用到的命令。我們要研究的命令包括那些被用來監(jiān)測網(wǎng)絡(luò)和傳輸文件的命令。另外,我們 還會探討用來遠(yuǎn)端登錄的 ssh 程序。這章會介紹:
> * ping - 發(fā)送 ICMP ECHO_REQUEST 軟件包到網(wǎng)絡(luò)主機(jī)
> * traceroute - 打印到一臺網(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)背景知識。在這個(gè)因特網(wǎng)時(shí)代,每個(gè)計(jì)算機(jī)用戶需要理解基本的網(wǎng)絡(luò) 系統(tǒng)概念。為了能夠充分利用這一章節(jié)的內(nèi)容,我們應(yīng)該熟悉以下術(shù)語:
* IP (網(wǎng)絡(luò)協(xié)議)地址
* 主機(jī)和域名
* URI(統(tǒng)一資源標(biāo)識符)
請查看下面的“拓展閱讀”部分,有幾篇關(guān)于這些術(shù)語的有用文章。
* * *
注意:一些將要講到的命令可能(取決于系統(tǒng)發(fā)行版)需要從系統(tǒng)發(fā)行版的倉庫中安裝額外的軟件包, 并且一些命令可能需要超級用戶權(quán)限才能執(zhí)行。
* * *
## 檢查和監(jiān)測網(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,到 一臺指定的主機(jī)。大多數(shù)接收這個(gè)包的網(wǎng)絡(luò)設(shè)備將會回復(fù)它,來允許網(wǎng)絡(luò)連接驗(yàn)證。
* * *
注意:大多數(shù)網(wǎng)絡(luò)設(shè)備(包括 Linux 主機(jī))都可以被配置為忽略這些數(shù)據(jù)包。通常,這樣做是出于網(wǎng)絡(luò)安全 原因,部分地遮蔽一臺主機(jī)免受一個(gè)潛在攻擊者地侵襲。配置防火墻來阻塞 IMCP 流量也很普遍。
* * *
例如,看看我們能否連接到網(wǎng)站 linuxcommand.org(我們最喜歡的網(wǎng)站之一), 我們可以這樣使用 ping 命令:
~~~
[me@linuxbox ~]$ ping linuxcommand.org
~~~
一旦啟動,ping 命令會持續(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ò)會報(bào)告 零個(gè)數(shù)據(jù)包丟失。一個(gè)成功執(zhí)行的“ping”命令會意味著網(wǎng)絡(luò)的各個(gè)部件(網(wǎng)卡,電纜,路由,網(wǎng)關(guān)) 都處于正常的工作狀態(tài)。
### traceroute
這個(gè) traceroute 程序(一些系統(tǒng)使用相似的 tracepath 程序來代替)會顯示從本地到指定主機(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é)果中,我們可以看到連接測試系統(tǒng)到 slashdot.org 網(wǎng)站需要經(jīng)由16個(gè)路由器。對于那些 提供標(biāo)識信息的路由器,我們能看到它們的主機(jī)名,IP 地址和性能數(shù)據(jù),這些數(shù)據(jù)包括三次從本地到 此路由器的往返時(shí)間樣本。對于那些沒有提供標(biāo)識信息的路由器(由于路由器配置,網(wǎng)絡(luò)擁塞,防火墻等 方面的原因),我們會看到幾個(gè)星號,正如行中所示。
### 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í)例中,我們看到我們的測試系統(tǒng)有兩個(gè)網(wǎng)絡(luò)接口。第一個(gè),叫做 eth0,是 因特網(wǎng)接口,和第二個(gè),叫做 lo,是內(nèi)部回環(huán)網(wǎng)絡(luò)接口,它是一個(gè)虛擬接口,系統(tǒng)用它來 “自言自語”。
當(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 地址。對于使用 DHCP(動態(tài)主機(jī)配置協(xié)議)的系統(tǒng),在 這個(gè)字段中的一個(gè)有效 IP 地址則證明了 DHCP 工作正常。
使用這個(gè)“-r”選項(xiàng)會顯示內(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è)簡單的例子里面,我們看到了,位于防火墻之內(nèi)的局域網(wǎng)中,一臺客戶端計(jì)算機(jī)的典型路由表。 第一行顯示了目的地 192.168.1.0。IP 地址以零結(jié)尾是指網(wǎng)絡(luò),而不是個(gè)人主機(jī), 所以這個(gè)目的地意味著局域網(wǎng)中的任何一臺主機(jī)。下一個(gè)字段,Gateway, 是網(wǎng)關(guān)(路由器)的名字或 IP 地址,用它來連接當(dāng)前的主機(jī)和目的地的網(wǎng)絡(luò)。 若這個(gè)字段顯示一個(gè)星號,則表明不需要網(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 命令的手冊,可以 得到所有選項(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ù)器就是存儲文件的計(jì)算機(jī),這些文件能夠通過 網(wǎng)絡(luò)下載和上傳。
FTP(它的原始形式)并不是安全的,因?yàn)樗鼤悦鞔a形式發(fā)送帳號的姓名和密碼。這就意味著 這些數(shù)據(jù)沒有加密,任何嗅探網(wǎng)絡(luò)的人都能看到。由于此種原因,幾乎因特網(wǎng)中所有 FTP 服務(wù)器 都是匿名的。一個(gè)匿名服務(wù)器能允許任何人使用注冊名“anonymous”和無意義的密碼登錄系統(tǒng)。
在下面的例子中,我們將展示一個(gè)典型的會話,從匿名 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
~~~
這里是對會話期間所輸入命令的解釋說明:
表17-1:
| 命令 | 意思 |
|---------|------------|
| ftp fileserver | 喚醒 ftp 程序,讓它連接到 FTP 服務(wù)器,fileserver。 |
| anonymous | 登錄名。輸入登錄名后,將出現(xiàn)一個(gè)密碼提示。一些服務(wù)器將會接受空密碼, 其它一些則會要求一個(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,所以文件會被下載到此目錄。 |
| bye | 退出遠(yuǎn)端服務(wù)器,結(jié)束 ftp 程序會話。也可以使用命令 quit 和 exit。 |
在 “ftp>” 提示符下,輸入 “help”,會顯示所支持命令的列表。使用 ftp 登錄到一臺 授予了用戶足夠權(quán)限的服務(wù)器中,則可以執(zhí)行很多普通的文件管理任務(wù)。雖然很笨拙, 但它真能工作。
### lftp - 更好的 ftp
ftp 并不是唯一的命令行形式的 FTP 客戶端。實(shí)際上,還有很多。其中比較好(也更流行的)是 lftp 程序, 由 Alexander Lukyanov 編寫完成。雖然 lftp 工作起來與傳統(tǒng)的 ftp 程序很相似,但是它帶有額外的便捷特性,包括 多協(xié)議支持(包括 HTTP),若下載失敗會自動地重新下載,后臺處理,用 tab 按鍵來補(bǔ)全路徑名,還有很多。
### wget
另一個(gè)流行的用來下載文件的命令行程序是 wget。若想從網(wǎng)絡(luò)和 FTP 網(wǎng)站兩者上都能下載數(shù)據(jù),wget 是很有用處的。 不只能下載單個(gè)文件,多個(gè)文件,甚至整個(gè)網(wǎng)站都能下載。下載 linuxcommand.org 網(wǎng)站的首頁, 我們可以這樣做:
~~~
[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 遞歸地下載,在后臺下載文件(你退出后仍在下載),能完成未下載 全的文件。這些特性在命令手冊,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ī)是否為它 所知道的那臺主機(jī)(這樣就阻止了所謂的“中間人”的攻擊),其次,它加密了本地與遠(yuǎn)程主機(jī)之間 所有的通訊信息。
SSH 由兩部分組成。SSH 服務(wù)器運(yùn)行在遠(yuǎn)端主機(jī)上運(yùn)行,在端口號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 端口號上接收網(wǎng)絡(luò)連接。
* * *
小貼示:如果你沒有遠(yuǎn)端系統(tǒng)去連接,但還想試試這些實(shí)例,則確認(rèn)安裝了 OpenSSH-server 軟件包 ,則可使用 localhost 作為遠(yuǎn)端主機(jī)的名字。這種情況下,計(jì)算機(jī)會和它自己創(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”。一旦建立了連接,會提示 用戶輸入他或她的密碼:
~~~
Warning: Permanently added 'remote-sys,192.168.1.4' (RSA) to the list
of known hosts.
me@remote-sys's password:
~~~
成功地輸入密碼之后,我們會接收到遠(yuǎn)端系統(tǒng)的 shell 提示符:
~~~
Last login: Sat Aug 30 13:00:48 2008
[me@remote-sys ~]$
~~~
遠(yuǎn)端 shell 會話一直存在,直到用戶輸入 exit 命令后,則關(guān)閉了遠(yuǎn)程連接。這時(shí)候,本地的 shell 會話 恢復(fù),本地 shell 提示符重新出現(xiàn)。
也有可能使用不同的用戶名連接到遠(yuǎn)程系統(tǒng)。例如,如果本地用戶“me”,在遠(yuǎn)端系統(tǒng)中有一個(gè)帳號名 “bob”,則用戶 me 能夠用 bob 帳號登錄到遠(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)證,則會提示以下信息:
~~~
[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)!
...
~~~
有兩種可能的情形會提示這些信息。第一,某個(gè)攻擊者企圖制造“中間人”襲擊。這很少見, 因?yàn)槊總€(gè)人都知道 ssh 會針對這種狀況發(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)的管理員查對一下。
當(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 會話,ssh 程序也允許我們在遠(yuǎn)端系統(tǒng)中執(zhí)行單個(gè)命令。 例如,在名為 remote-sys 的遠(yuǎn)端主機(jī)上,執(zhí)行 free 命令,并把輸出結(jié)果顯示到本地系統(tǒng) shell 會話中。
~~~
[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ù),比方說下面的例子,我們在遠(yuǎn)端系統(tǒng)中執(zhí)行 ls 命令, 并把命令輸出重定向到本地系統(tǒng)中的一個(gè)文件里面。
~~~
[me@linuxbox ~]$ ssh remote-sys 'ls \*' > dirlist.txt
me@twin4's password:
[me@linuxbox ~]$
~~~
注意,上面的例子中使用了單引號。這樣做是因?yàn)槲覀儾幌肼窂矫归_操作在本地執(zhí)行 ;而希望 它在遠(yuǎn)端系統(tǒng)中被執(zhí)行。同樣地,如果我們想要把輸出結(jié)果重定向到遠(yuǎn)端主機(jī)的文件中,我們可以 把重定向操作符和文件名都放到單引號里面。
~~~
[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)端啟動和運(yùn)行一個(gè) X 客戶端程序(一個(gè)圖形化應(yīng)用程序), 而應(yīng)用程序的顯示結(jié)果出現(xiàn)在本地。這很容易完成,這里有個(gè)例子:假設(shè)我們正坐在一臺裝有 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í)行之后,它的窗口就會出現(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è)冒號字符開頭。例如,如果我們想要 從遠(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ù)器。 這意味著任何一臺能用 SSH 客戶端連接的遠(yuǎn)端機(jī)器,也可當(dāng)作類似于 FTP 的服務(wù)器來使用。 這里是一個(gè)樣本會話:
~~~
[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, 來操作存儲在運(yùn)行著 SSH 服務(wù)器的遠(yuǎn)端系統(tǒng)中的文件。
* * *
> Windows 中的 SSH 客戶端
>
> 比方說你正坐在一臺 Windows 機(jī)器前面,但是你需要登錄到你的 Linux 服務(wù)器中,去完成 一些實(shí)際的工作,那該怎么辦呢?當(dāng)然是得到一個(gè) Windows 平臺下的 SSH 客戶端!有很多這樣 的工具。最流行的可能就是由 Simon Tatham 和他的團(tuán)隊(duì)開發(fā)的 PuTTY 了。這個(gè) PuTTY 程序 能夠顯示一個(gè)終端窗口,而且允許 Windows 用戶在遠(yuǎn)端主機(jī)中打開一個(gè) SSH(或者 telnet)會話。 這個(gè)程序也提供了 scp 和 sftp 程序的類似物。
>
> PuTTY 可在鏈接?[http://www.chiark.greenend.org.uk/~sgtatham/putty/](http://www.chiark.greenend.org.uk/~sgtatham/putty/)?處得到。
## 拓展閱讀
* Linux 文檔項(xiàng)目提供了 Linux 網(wǎng)絡(luò)管理指南,可以廣泛地(雖然過時(shí)了)了解網(wǎng)絡(luò)管理方面的知識。
[http://tldp.org/LDP/nag2/index.html](http://tldp.org/LDP/nag2/index.html)
* Wikipedia 上包含了許多網(wǎng)絡(luò)方面的優(yōu)秀文章。這里有一些基礎(chǔ)的:
[http://en.wikipedia.org/wiki/Internet_protocol_address](http://en.wikipedia.org/wiki/Internet_protocol_address)
[http://en.wikipedia.org/wiki/Host_name](http://en.wikipedia.org/wiki/Host_name)
[http://en.wikipedia.org/wiki/Uniform_Resource_Identifier](http://en.wikipedia.org/wiki/Uniform_Resource_Identifier)
- 第一章:引言
- 第二章:什么是shell
- 第三章:文件系統(tǒng)中跳轉(zhuǎn)
- 第四章:研究操作系統(tǒng)
- 第五章:操作文件和目錄
- 第六章:使用命令
- 第七章:重定向
- 第八章:從shell眼中看世界
- 第九章:鍵盤高級操作技巧
- 第十章:權(quán)限
- 第十一章:進(jìn)程
- 第十二章:shell環(huán)境
- 第十三章:VI簡介
- 第十四章:自定制shell提示符
- 第十五章:軟件包管理
- 第十六章:存儲媒介
- 第十七章:網(wǎng)絡(luò)系統(tǒng)
- 第十八章:查找文件
- 第十九章:歸檔和備份
- 第二十章:正則表達(dá)式
- 第二十一章:文本處理
- 第二十二章:格式化輸出
- 第二十三章:打印
- 第二十四章:編譯程序
- 第二十五章:編寫第一個(gè)shell腳本
- 第二十六章:啟動一個(gè)項(xiàng)目
- 第二十七章:自頂向下設(shè)計(jì)
- 第二十八章:流程控制 if分支結(jié)構(gòu)
- 第二十九章:讀取鍵盤輸入
- 第三十章:流程控制 while/until 循環(huán)
- 第三十一章:疑難排解
- 第三十二章:流程控制 case分支
- 第三十三章:位置參數(shù)
- 第三十四章:流程控制 for循環(huán)
- 第三十五章:字符串和數(shù)字
- 第三十六章:數(shù)組
- 第三十七章:奇珍異寶
