说到网络,Linux可能无所不能。Linux用于构建各种网络系统和设备,包括防火墙、路由器、名称服务器、网络连接存储(network-attached storage,NAS)盒等。
正如网络的主题是广泛的一样,可用于配置和控制它的命令数量也是如此。我们将只关注其中一些最常用的命令。选择用于检查的命令包括用于监视网络的命令和用于传输文件的命令。此外,我们将探索用于执行远程登录的 ssh
程序。本章将介绍以下命令:
ping
—— 向网络主机发送 ICMP ECHO_REQUESTtraceroute
—— 将路由数据包跟踪打印到网络主机ip
—— 显示/操作路由、设备、策略路由和隧道netstat
—— 打印网络连接、路由表、接口统计信息、伪装连接(masquerade connections)和多播成员资格(multicast memberships)ftp
—— 互联网文件传输程序curl
—— 传输URLwget
—— 非交互式网络下载器ssh
—— OpenSSH SSH客户端(远程登录程序)我们将假设一点网络背景。在这个互联网时代,每个使用电脑的人都需要对网络概念有基本的了解。为了充分利用本章,我们应该熟悉以下术语:
请参阅下面的“进一步阅读”部分,了解有关这些术语的一些有用文章。
注意:我们将介绍的一些命令可能(取决于您的发行版)需要从发行版的存储库安装额外的软件包,有些可能需要超级用户权限才能执行。
第十六章:网络检查和监控网络ping
traceroute
ip
通过网络传输文件ftp
lftp
—— 一个更好的 ftp
curl
—— 传输URLwget
—— 非交互式网络下载器与远程主机的安全通信ssh
SSH隧道scp
和 sftp
Windows的SSH客户端?总结
即使您不是系统管理员,检查网络的性能和操作通常也会有所帮助。
ping
最基本的网络命令是 ping
。 ping
命令向指定主机发送一个名为 ICMP ECHO_REQUEST
的特殊网络数据包。大多数接收此数据包的网络设备都会对其进行回复,从而验证网络连接。
注意:可以将大多数网络设备(包括Linux主机)配置为忽略这些数据包。这通常是出于安全原因,以部分掩盖主机免受潜在攻击者的攻击。防火墙配置为阻止ICMP流量也很常见。
例如,为了查看我们是否可以访问 linuxcommand.org
(我们最喜欢的网站之一 ;-),我们可以这样使用 ping
:
xxxxxxxxxx
[me@linuxbox ~]$ ping linuxcommand.org
启动后,ping会继续以指定的间隔(默认为1秒)发送数据包,直到中断。
xxxxxxxxxx
[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
64 bytes from vhost.sourceforge.net (66.35.250.210): icmp_seq=6 ttl=43 time=107 ms
--- linuxcommand.org ping statistics ---
6 packets transmitted, 6 received, 0% packet loss, time 6010ms rtt min/avg/max/mdev = 105.647/107.052/108.118/0.824 ms
按 Ctrl-c 中断后(以上示例是在第六个数据包之后), ping
会打印性能统计数据。性能正常的网络将显示0%的数据包丢失。成功的“ping”将表明网络的元素(其接口卡、布线、路由和网关)通常处于良好的工作状态。
traceroute
traceroute
程序(一些系统使用类似的 tracepath
程序)列出了从本地系统到指定主机的所有网络流量的“跳数”(hops)。例如,要查看到达 slashdot.org
的路线,我们可以这样做:
xxxxxxxxxx
[me@linuxbox ~]$ traceroute slashdot.org
输出看起来像这样:
xxxxxxxxxx
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 ms 14.233 ms 14.405 ms
7 po-10-ar02.whitemarsh.md.bad.comcast.net (68.87.129.34) 16.154 ms 13.600 ms 18.867 ms
8 te-0-3-0-1-cr01.philadelphia.pa.ibone.comcast.net (68.86.90.77) 21.951 ms 21.073 ms 21.557 ms
9 pos-0-8-0-0-cr01.newyork.ny.ibone.comcast.net (68.86.85.10) 22.917 ms 21.884 ms 22.126 ms
10 204.70.144.1 (204.70.144.1) 43.110 ms 21.248 ms 21.264 ms
11 cr1-pos-0-7-3-1.newyork.savvis.net (204.70.195.93) 21.857 ms cr2-pos-0-0-3-1.newyork.savvis.net (204.70.204.238) 19.556 ms cr1-pos-0-7-3-1.newyork.savvis.net (204.70.195.93) 19.634 ms
12 cr2-pos-0-7-3-0.chicago.savvis.net (204.70.192.109) 41.586 ms 42.843 ms cr2-tengig-0-0-2-0.chicago.savvis.net (204.70.196.242) 43.115 ms
13 hr2-tengigabitethernet-12-1.elkgrovech3.savvis.net (204.70.195.122) 44.215 ms 41.833 ms 45.658 ms
14 csr1-ve241.elkgrovech3.savvis.net (216.64.194.42) 46.840 ms 43.372 ms 47.041 ms
15 64.27.160.194 (64.27.160.194) 56.137 ms 55.887 ms 52.810 ms
16 slashdot.org (216.34.181.45) 42.727 ms 42.016 ms 41.437 ms
在输出中,我们可以看到从我们的测试系统连接到 slashdot.org
需要遍历16个路由器。对于提供标识信息的路由器,我们可以看到它们的主机名、IP地址和性能数据,其中包括从本地系统到路由器的三个往返时间样本。对于不提供标识信息的路由器(由于路由器配置、网络拥塞、防火墙等),我们在跳数2的行中看到星号。在路由信息被阻止的情况下,我们有时可以通过在 traceroute
命令中添加 -T
或 -I
选项来克服这一点。
ip
ip
程序是一个多用途的网络配置工具,它利用了现代Linux内核中可用的全部网络功能。它取代了早期且现已弃用的 ifconfig
程序。 ip
程序用于检查各种网络设置和统计数据。通过使用它的许多选项,我们可以查看网络设置中的各种功能。通过 ip
,我们可以检查系统的网络接口和路由表。首先,接口:
xxxxxxxxxx
[me@linuxbox ~]$ ip address show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host noprefixroute
valid_lft forever preferred_lft forever
2: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:26:6c:26:67:bf brd ff:ff:ff:ff:ff:ff
inet 192.168.1.223/24 brd 192.168.50.255 scope global dynamic noprefixroute enp1s0
valid_lft 82366sec preferred_lft 82366sec
inet6 fe80::226:6cff:fe26:67bf/64 scope link noprefixroute
valid_lft forever preferred_lft forever
3: wlp2s0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN group default qlen 1000
link/ether 06:8a:59:f4:f6:d3 brd ff:ff:ff:ff:ff:ff permaddr 24:ec:99:46:aa:1e
在上面的例子中,我们看到我们的测试系统有三个网络接口。第一个称为 lo
,是环回接口(loopback interface),一个系统用来“与自己对话”的虚拟接口,第二个称为 enp1s0
,是以太网接口(en
=Ethernet,以太网),第三个称为 wlp2s0
是无线接口( wl
=wireless,无线)...
执行临时网络诊断时,要查找的重要内容是接口的第一行中是否存在短语 state UP
,表示它已启用,以及第三行 inet
字段中是否存在有效的IP地址。对于使用动态主机配置协议(Dynamic Host Configuration Protocol ,DHCP)的系统,此字段中的有效IP地址将验证DHCP是否正常工作。
接下来是路由表:
xxxxxxxxxx
[me@linuxbox ~]$ ip route show
default via 192.168.1.1 dev enp1s0 proto dhcp src 192.168.50.223 metric 100
169.254.0.0/16 dev enp1s0 scope link metric 1000
192.168.1.0/24 dev enp1s0 proto kernel scope link src 192.168.1.223 metric 100
在这个简单的例子中,我们看到了防火墙/路由器后面局域网(LAN)上客户端机器的典型路由表。以零结尾的IP地址指的是网络,而不是单个主机,因此这个目的地意味着可以直接访问局域网上的任何主机。我们看到列出了两个网络:169.254.0.0
和 192.168.1.0
。现在, 192.168.1.0
网络是我们的局域网,但 169.254.0.0
是什么?好吧,这是一种称为自动私有IP寻址(Automatic Private IP Addressing ,APIPA)的网络技巧。它用于在DHCP服务器不可用时自动分配IP地址。
第一行包含目标 default
(默认值)。这意味着将任何发往表中未列出的网络的流量发送到此地址。在我们的示例中,我们看到默认网关被定义为地址为192.168.1.1的路由器(家庭路由器的典型地址),它可能知道如何处理目标流量。
ip
命令是一个复杂的程序,有许多选项和命令。命令语法由以下部分组成:
ip [ -options ] object [ command ]
在前面的示例中,我们使用了 show
命令的对象 address
和 route
。为了方便起见, ip
允许将对象名称缩短为单个字符,并且由于显示了默认命令,我们可以将命令缩短为 ip a
和 ip r
,并获得相同的结果。
除非我们能在网络上移动文件,否则网络有什么用?有许多程序可以通过网络传输数据。我们现在将介绍其中两个,在后面的章节中还会介绍几个。
ftp
作为真正的“经典”程序之一, ftp
的名字来自它使用的协议,即文件传输协议(File Transfer Protocol)。FTP曾经是通过互联网下载文件最广泛使用的方法。一些web浏览器仍然支持它,我们可能会看到URI以协议 ftp://
开头。
在有网络浏览器之前,就已经有 ftp
程序了。 ftp
用于与 FTP server 通信,FTP服务器包含可以通过网络上传和下载的文件。
FTP(原始形式)不安全,因为它以明文形式发送帐户名和密码。这意味着它们没有加密,任何嗅探(sniffing)网络的人都可以看到它们。因此,几乎所有通过互联网完成的FTP都是由匿名FTP服务器(anonymous FTP servers)完成的。匿名服务器允许任何人使用登录名 anonymous 和无意义的密码登录。
在下面的示例中,我们展示了一个虚构的会话,其中 ftp
程序正在下载位于匿名FTP服务器 fileserver
的 /pub/cd_images/Ubuntu-24.04 目录中的Ubuntu ISO映像:
xxxxxxxxxx
[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-24.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-24.04-desktop-amd64.iso
226 Directory send OK.
ftp> lcd Desktop
Local directory now /home/me/Desktop
ftp> get ubuntu-24.04-desktop-amd64.iso
local: ubuntu-24.04-desktop-amd64.iso remote: ubuntu-24.04-desktop-amd64.iso
200 PORT command successful. Consider using PASV.
150 Opening BINARY mode data connection for ubuntu-24.04-desktop-amd64.iso (733079552 bytes).
226 File send OK.
733079552 bytes received in 68.56 secs (10441.5 kB/s)
ftp> bye
下表解释了在此会话期间输入的命令:
命令 | 含义 |
---|---|
ftp fileserver | 调用ftp程序并将其连接到FTP服务器 fileserver 。 |
anonymous | 登录名。登录提示后,将出现密码提示。一些服务器将接受空白密码;其他的则需要电子邮件地址形式的密码。那样的话,试试这样的 user@example.com 。 |
cd path | 切换到远程系统上包含所需文件的目录。请注意,在大多数匿名FTP服务器上,公共下载的文件位于 pub 目录下的某个位置。 |
ls | 列出远程系统上的目录。 |
lcd Desktop | 将本地系统上的目录更改为 ~/Desktop 。在该示例中,当工作目录为 ~ 时调用了 ftp 程序。此命令将工作目录更改为 ~/Desktop 。 |
get file | 告诉远程系统将文件 file 传输到本地系统。由于本地系统上的工作目录已更改为~/Desktop,因此文件将在那里下载。 |
bye | 注销远程服务器并结束 ftp 程序会话。也可以使用 quit 和 exit 命令。 |
在 ftp>
提示符下键入 help
将显示支持的命令列表。在已授予足够权限的服务器上使用 ftp
,可以执行许多普通的文件管理任务。它很笨拙,但确实有效。
lftp
—— 一个更好的 ftp
ftp
不是唯一的命令行FTP客户端。事实上,有很多。其中一个更好(也更受欢迎)的是亚历山大·卢基扬诺夫的 lftp
。它的工作原理与传统的 ftp
程序非常相似,但有许多额外的便利功能,包括多协议支持(包括HTTP)、下载失败时的自动重试、后台进程、路径名的标签完成等等。
curl
—— 传输URL另一个流行的文件传输程序是 curl
。它最基本的用法是这样的:
xxxxxxxxxx
[me@linuxbox ~]$ curl https://linuxcommand.org
我们指定一个URL, curl
下载URL的第一页并将其输出到标准输出。可以指定多个URL。
curl支持大多数网络协议,包括HTTP、HTTPS、FTP、IMAP、POP3、SFTP、SMB等。下表列出了 curl
支持的许多选项中的一些:
选项 | 含义 |
---|---|
-o,--output file | 将输出发送到指定 file ,而不是标准输出。 |
-O,--remote-name | 类似 -o ,但将本地文件的名称与远程文件的名称相同。 |
-s,--silent | 静默方式,抑制进度计和错误消息。 |
-u,--proxy-user user:passwd | 指定用户名/密码组合。 |
-v,--verbose | 执行时显示详细消息。 |
curl
手册页涵盖了所有可怕的细节。
wget
—— 非交互式网络下载器另一个用于文件下载的命令行程序是 wget
。它对于从web和FTP站点下载内容都很有用。可以下载单个文件、多个文件,甚至整个网站。要下载 linuxcommand.org
的第一页,我们可以这样做:
xxxxxxxxxx
[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]
该程序的许多选项允许 wget
递归下载,在后台下载文件(允许您注销但继续下载),并完成部分下载文件的下载。这些功能在其优于平均水平的手册页中得到了很好的记录。
多年来,类Unix操作系统已经能够通过网络进行远程管理。在互联网普遍采用之前的早期,有几个流行的程序用于登录远程主机。这些是 rlogin
和 telnet
程序。然而,这些程序与 ftp
程序一样存在致命的缺陷;它们以明文形式传输所有通信(包括登录名和密码)。这使得它们完全不适合在互联网时代使用。
ssh
为了解决这个问题,开发了一种名为Secure Shell(SSH)的新协议。SSH解决了与远程主机进行安全通信的两个基本问题。
SSH由两部分组成。SSH服务器在远程主机上运行,默认情况下在端口22上监听传入连接,而本地系统上使用SSH客户端与远程服务器通信。
大多数Linux发行版都附带了OpenBSD项目中名为OpenSSH的SSH实现。默认情况下,一些发行版包括客户端和服务器端软件包,而另一些发行版只提供客户端。为了使系统能够接收远程连接,它必须安装、配置并运行 OpOpenSSH-server
包,并且(如果系统正在运行或位于防火墙后面)它必须允许TCP端口22上的传入网络连接。
提示:如果您没有要连接的远程系统,但想尝试这些示例,请确保您的系统上安装了 OpenSSH-server
包,并使用 localhost
作为远程主机的名称。这样,您的机器将与自己建立网络连接。
用于连接到远程SSH服务器的SSH客户端程序被恰当地称为SSH。要连接到名为 remote-sys
的远程主机,我们将使用 ssh
客户端程序,如下所示:
xxxxxxxxxx
[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)?
首次尝试连接时,将显示一条消息,指示无法建立远程主机的真实性。这是因为客户端程序以前从未见过此远程主机。要接受远程主机的凭据,请在提示时输入 yes 。连接建立后,系统会提示用户输入密码:
xxxxxxxxxx
Warning: Permanently added 'remote-sys,192.168.1.4' (RSA) to the list of known hosts.
me@remote-sys's password:
成功输入密码后,我们会收到来自远程系统的shell提示:
xxxxxxxxxx
Last login: Sat Aug 30 13:00:48 2024
[me@remote-sys ~]$
远程shell会话将继续,直到用户在远程shell提示符处输入 exit
命令,从而关闭远程连接。此时,本地shell会话恢复,本地shell提示符重新出现。
也可以使用不同的用户名连接到远程系统。例如,如果本地用户 me
在远程系统上有一个名为 bob
的帐户,则用户 me
可以按如下方式登录到远程系统上的帐户 bob
:
xxxxxxxxxx
[me@linuxbox ~]$ ssh bob@remote-sys
bob@remote-sys's password:
Last login: Sat Aug 30 13:03:21 2024
[bob@remote-sys ~]$
如前所述,ssh
验证远程主机的真实性。如果远程主机未成功通过身份验证,将显示以下消息:
xxxxxxxxxx
[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)!
It is also possible that a host key has just been changed.
The fingerprint for the ECDSA key sent by the remote host is
SHA256:9uhOXHzPz0AjIs0ZDanNYfv7ksUO4Mjy5pR4kUTSKkA.
Please contact your system administrator.
Add correct host key in /home/me/.ssh/known_hosts to get rid of this message.
Offending ECDSA key in /home/me/.ssh/known_hosts:42
remove with:
ssh-keygen -f "/home/me/.ssh/known_hosts" -R "remote-sys"
Host key for remote-sys has changed and you have requested strict checking.
Host key verification failed.
此消息是由两种可能的情况之一引起的。首先,攻击者可能正在试图进行中间人攻击。这种情况很少见,因为每个人都知道 ssh
会提醒用户注意这一点。更有可能的罪魁祸首是远程系统发生了某种变化;例如,其操作系统或SSH服务器已被重新安装。然而,为了安全起见,不应立即排除第一种可能性。出现此消息时,请务必与远程系统的管理员联系。
在确定消息是由良性原因引起的之后,在客户端纠正问题是安全的。这是通过使用警告消息提供的建议来完成的:
xxxxxxxxxx
ssh-keygen -f "/home/me/.ssh/known_hosts" -R "remote-sys"
如果做不到这一点,我们可以使用文本编辑器(也许是 vim
)从 ~/.ssh/known_hosts 文件中删除过时的密钥。在上面的示例消息中,我们看到:
xxxxxxxxxx
Offending key in /home/me/.ssh/known_hosts:42
这意味着 known_hosts 文件的第42行包含违规(offending)密钥。从文件中删除此行, ssh
程序将能够接受来自远程系统的新身份验证凭据。
除了在远程系统上打开shell会话外, ssh
还允许我们在远程系统中执行单个命令。例如,要在名为 remotesys
的远程主机上执行 free
命令并在本地系统上显示结果,请使用以下命令:
x[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: 1572856 0 1572856
[me@linuxbox ~]$
可以以更有趣的方式使用此技术,例如以下示例,其中我们在远程系统上执行 ls
并将输出重定向到本地系统上的文件:
xxxxxxxxxx
[me@linuxbox ~]$ ssh remote-sys 'ls *' > dirlist.txt
me@twin4's password:
[me@linuxbox ~]$
请注意上面命令中单引号的使用。这样做是因为我们不希望在本地计算机上执行路径名扩展;相反,我们希望它在远程系统上执行。同样,如果我们希望将输出重定向到远程计算机上的文件,我们可以将重定向运算符和文件名放在单引号内:
xxxxxxxxxx
[me@linuxbox ~]$ ssh remote-sys 'ls * > dirlist.txt'
当您通过SSH与远程主机建立连接时,会在本地和远程系统之间创建加密隧道。通常,此隧道用于允许在本地系统键入的命令安全地传输到远程系统,并将结果安全地传输回来。除了这一基本功能外,SSH协议还允许大多数类型的网络流量通过加密隧道发送,在本地和远程系统之间创建一种虚拟专用网络(VPN)。
也许此功能最常见的用途是允许传输X Window系统流量。在仍运行X服务器的系统上(而不是使用Wayland的现代系统),可以在远程系统上启动和运行X客户端程序(图形应用程序),并使其显示在本地系统上。这很容易做到;这里有一个例子。假设我们坐在一个名为 linuxbox
的Linux系统上,该系统运行着一个X服务器,我们想在名为 remote-sys
的远程系统上运行 xload
程序,以查看该程序在本地系统上的图形输出。我们可以这样做:
xxxxxxxxxx
[me@linuxbox ~]$ ssh -X remote-sys
me@remote-sys's password:
Last login: Mon Sep 08 13:23:11 2016
[me@remote-sys ~]$ xload
在远程系统上执行xload命令后,其窗口将出现在本地系统上。在某些系统中,您可能需要使用 -Y
选项而不是 -X
选项来执行此操作。
scp
和 sftp
OpenSSH软件包还包括两个程序,可以利用SSH加密的隧道(SSH-encrypted tunnel)在网络上复制文件。第一个程序 scp
(secure copy,安全复制)的使用方式与熟悉的 cp
程序非常相似。最显著的区别是,源或目标路径名前面可能有远程主机的名称,后面跟着冒号字符。例如,如果我们想将名为 document.txt 的文档从远程系统 remote-sys
上的主目录复制到本地系统上的当前工作目录,我们可以这样做:
xxxxxxxxxx
[me@linuxbox ~]$ scp remote-sys:document.txt .
me@remote-sys's password:
document.txt 100% 5581 5.5KB/s 00:00
[me@linuxbox ~]$
与 ssh
一样,如果所需的远程主机帐户名与本地系统的帐户名不匹配,您可以将用户名应用于远程主机名的开头。
xxxxxxxxxx
[me@linuxbox ~]$ scp bob@remote-sys:document.txt .
第二个SSH文件复制程序是 sftp
,顾名思义,它是 ftp
程序的安全替代品。 sftp
的工作原理与我们之前使用的原始 ftp
程序非常相似;然而,它使用SSH加密的隧道,而不是以明文形式传输所有内容。 sftp
比传统的 ftp
有一个重要的优势,因为它不需要在远程主机上运行FTP服务器。它只需要SSH服务器。这意味着任何可以连接SSH客户端的远程机器也可以用作类似FTP的服务器。以下是一个示例会话:
xxxxxxxxxx
[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
提示:Linux发行版中的许多图形文件管理器都支持SFTP协议。使用GNOME或KDE,我们可以在位置栏中输入一个以 sftp:// 开头的URI,并对运行SSH服务器的远程系统上存储的文件进行操作。
假设你坐在一台Windows机器上,但你需要登录到你的Linux服务器并完成一些真正的工作;你是做什么的?当然,为您的Windows设备获取SSH客户端程序!这样的例子有很多。最受欢迎的可能是Simon Tatham和他的团队的PuTTY。PuTTY程序显示一个终端窗口,并允许Windows用户在远程主机上打开SSH(或 telnet
)会话。该程序还为 scp
和 sftp
程序提供了类似程序。
【Windows命令行和power shell都可以作为ssh客户端工作窗口】
在本章中,我们调查了大多数Linux系统上的一些网络工具。由于Linux在服务器和网络设备中的应用如此广泛,因此可以通过安装其他软件来添加更多内容。但是,即使使用基本的工具集,也可以执行许多有用的网络相关任务。