更多服务器知识,尽在hostol.com
嘿,各位 Linux 服务器的“搬运工”们!在咱们日常的服务器管理和开发工作中,把文件从一台机器搬到另一台机器,那简直是家常便饭,对不对?可能是把本地写好的代码部署到服务器上,可能是从服务器下载日志文件到本地分析,也可能是在两台远程服务器之间同步数据。这活儿看似简单,但你真的选对“搬运工具”了吗?还在用老掉牙又不安全的 FTP “裸奔”传输?或者每次传大文件都因为网络中断而从头再来,气得直跺脚?
别担心!在 Linux 的世界里,我们有好几位“身怀绝技”的“安全快递员”和“智能搬运工”,它们不仅能保证你文件传输过程的**安全**(通过加密通道),还能大大提升你的**效率**。今天,我就来给大家详细介绍并实战演练三个最常用也最好用的“大内高手”:SCP (Secure Copy)、Rsync (Remote Sync),以及 SFTP (SSH File Transfer Protocol)。
把它们想象成不同类型的“物流服务”:
- SCP 就像是你的“私人专递”,简单直接,点对点安全送达一个小包裹。
- Rsync 则更像是“智能仓储配送系统”,它能分析两边货物的差异,只运送变化的部分,特别适合同步大量文件或做增量备份。
- SFTP 就像是一个你可以远程操控的“安全储物柜台”,你可以在里面浏览、取件、存件,进行交互式的文件管理。
这篇教程,我就带你把这三位“高手”的看家本领都学到手,让你在未来需要在 Linux 服务器之间搬运文件时,能根据不同的“包裹”类型和“运输需求”,从容地选择最合适的“快递方案”!准备好了吗?让我们开始这场“安全高效文件传输之旅”吧!
准备工作:在“发货”之前你需要什么?
在我们开始使用这些强大的工具之前,请确保你的“发货站”和“收货站”(也就是你的服务器)已经满足以下基本条件:
- 至少两台 Linux 服务器(或一台本地 Linux/macOS/Windows(带SSH客户端) + 一台远程 Linux 服务器): 我们需要一个源端(存放文件的起始位置)和一个目标端(文件要传输到的位置)。当然,很多情况下,你的本地电脑就是源端或目标端之一。
- 两边都有 SSH 服务并已正确配置: 这是核心!SCP, Rsync (通过SSH模式), SFTP 这三个工具,它们的“安全”都依赖于底层的 SSH (Secure Shell) 协议进行身份验证和数据加密。所以,你必须确保:
- 目标服务器上运行着 SSH 服务 (通常是
sshd
)。 - 你知道目标服务器的 IP 地址或域名。
- 你知道一个可以在目标服务器上登录的用户名,并且拥有相应的密码或(强烈推荐)配置了 SSH 密钥对进行免密登录。
- 防火墙(服务器端和客户端,以及任何中间网络设备)允许 SSH 端口(默认为 22)的通信。
- 目标服务器上运行着 SSH 服务 (通常是
- 拥有合适的权限: 你登录服务器的用户账号,需要有权限读取源文件/目录,并且有权限在目标位置创建/写入文件和目录。
- 基础的 Linux 命令行知识: 你需要知道如何在终端里输入命令、理解基本的路径表示方法(如
/home/user/file.txt
)。
如果这些都准备好了,那我们就可以开始“发货”了!
方法一:SCP (Secure Copy) - 简单直接的“安全快递员”
SCP 是什么?
SCP (Secure Copy Protocol) 是一个基于 SSH 协议在网络上的两台计算机之间安全地传输文件的命令行工具。它是 OpenSSH 套件的一部分,几乎所有的 Linux 和 macOS 系统都自带这个命令,Windows 上也可以通过 Git Bash, PuTTY (pscp.exe) 或 WSL 来使用。
你可以把 SCP 想象成一个非常靠谱的“快递员”,他会把你的“包裹”(文件或目录)通过一条“加密的秘密通道”(SSH 连接)安全地从A地送到B地。它的优点是**简单直接、安全可靠**。
核心语法:
SCP 的命令格式通常如下:
scp [选项] [源用户名@源主机:]/源路径/文件名 [目标用户名@目标主机:]/目标路径/
[选项]
: 比如-r
(递归复制目录),-P 端口号
(如果SSH用非标准端口),-p
(保留文件属性)等。[源用户名@源主机:]/源路径/文件名
: 指定源文件的位置。- 如果是本地文件,就直接写路径,如
/path/to/local/file.txt
。 - 如果是远程文件,格式是
用户名@远程主机IP或域名:/远程服务器上的路径/文件名
。
- 如果是本地文件,就直接写路径,如
[目标用户名@目标主机:]/目标路径/
: 指定目标位置。格式同上。
是不是看起来有点像我们熟悉的 cp
(copy) 命令?没错,只是加上了远程主机和用户名的部分。
实战示例:
- 从本地复制单个文件到远程服务器: 假设你要把本地
/home/myuser/backup.zip
文件复制到 IP 地址为192.168.1.101
的远程服务器上,用户名为remoteuser
,目标路径是/opt/backups/
: [提示:请将以下代码片段复制并粘贴到 WordPress 的“代码”区块中]scp /home/myuser/backup.zip remoteuser@192.168.1.101:/opt/backups/
执行后,系统会提示你输入remoteuser
在远程服务器上的密码(如果你没有配置免密登录的话)。 - 从远程服务器复制单个文件到本地: 反过来,把远程服务器
192.168.1.101
上/var/log/app.log
文件下载到本地的/tmp/
目录: [提示:请将以下代码片段复制并粘贴到 WordPress 的“代码”区块中]scp remoteuser@192.168.1.101:/var/log/app.log /tmp/
- 复制整个目录(包含其下所有文件和子目录): 你需要使用
-r
(recursive) 选项。例如,把本地的/home/myuser/myproject/
整个目录复制到远程服务器的/var/www/
目录下: [提示:请将以下代码片段复制并粘贴到 WordPress 的“代码”区块中]scp -r /home/myuser/myproject remoteuser@192.168.1.101:/var/www/
这会在远程服务器的/var/www/
目录下创建一个名为myproject
的文件夹,并将本地myproject
目录下的所有内容都复制过去。 - 如果远程服务器 SSH 使用非标准端口(比如 2222): 你需要使用大写的
-P
参数(注意,这和ssh
命令用小写-p
指定端口不同!)来指定端口号: [提示:请将以下代码片段复制并粘贴到 WordPress 的“代码”区块中]scp -P 2222 /local/file.txt remoteuser@192.168.1.101:/remote/path/
- 保留文件原始属性(如修改时间、权限): 使用小写的
-p
(preserve) 选项: [提示:请将以下代码片段复制并粘贴到 WordPress 的“代码”区块中]scp -p /local/file.txt remoteuser@192.168.1.101:/remote/path/
- 限制传输带宽(比如限制为 500 KB/s): 使用
-l
(limit) 选项,单位是 Kbit/s (注意是小 b,比特)。500 KB/s 大约是 4000 Kbit/s。 [提示:请将以下代码片段复制并粘贴到 WordPress 的“代码”区块中]scp -l 4000 /local/largefile.zip remoteuser@192.168.1.101:/remote/
- 在两台远程服务器之间直接传输文件 (通过本地作为中转或使用
-3
选项): 如果你想把服务器 A 上的文件直接复制到服务器 B 上,通常 SCP 会先把文件下载到你执行命令的这台机器,然后再上传到服务器 B,效率不高。如果你的 OpenSSH 版本较新,可以使用-3
选项强制通过中转主机(也就是你当前操作的机器)进行复制,或者在某些情况下,如果两台远程服务器之间配置了互信,它可以尝试直接在它们之间传输,但通常还是会经过你的本地机器进行数据流的转发,除非两台服务器之间有特殊的SSH配置允许直接连接和认证。 一个更可靠的、通常推荐的“远程到远程”传输方式(如果你当前机器无法直接作为高效中转),是先 SSH 登录到其中一台远程服务器,然后再从那台服务器上执行 SCP 命令去连接另一台远程服务器。或者,考虑使用后面介绍的 Rsync 或 SFTP。
SCP 的优点:
- 命令语法相对简单,容易上手,和
cp
命令类似。 - 基于 SSH,传输过程是加密的,非常安全。
- 几乎所有 Linux/macOS 系统都自带,无需额外安装。
SCP 的缺点:
- 如果传输过程中发生网络中断,SCP 通常无法断点续传,你需要从头开始重新传输整个文件,这对于大文件来说非常痛苦。
- 在同步两个已经存在大部分相同内容的目录时,SCP 会把所有文件都重新传输一遍,不够高效。
- 相比 Rsync,它的功能选项较少,控制粒度不够细。
- 错误提示和进度显示有时不够友好。
总的来说,SCP 非常适合进行**一次性的、中小规模的文件或目录的安全复制**。它就像是那个不多话但办事牢靠的“快递小哥”,你告诉他把什么东西从哪送到哪,他就能安全搞定。
方法二:Rsync (Remote Sync) - 智能高效的“差异同步专家”
Rsync 是什么?
如果说 SCP 是个“老实巴交”的快递员,每次都把整个包裹原样送达,那么 Rsync (Remote Sync) 就是一位极其聪明的“物流调度大师”和“差异同步专家”。它不仅能安全地(默认也通过 SSH)传输文件和目录,更厉害的是,它能**只传输源和目标之间有差异的部分**!
这是通过一种巧妙的“delta-transfer”算法实现的:在传输前,Rsync 会比较源文件和目标文件的内容,找出哪些部分是新增的或修改过的,然后只把这些“增量”数据传输过去,并在目标端重新组合成完整的文件。这使得 Rsync 在同步大型目录、进行增量备份、或者在网络不稳定的情况下传输大文件时,效率远超 SCP。
你可以把它想象成,你要给朋友更新一个大型软件的安装包,朋友那里已经有了一个旧版本。用 SCP 的话,你得把整个新版本的几 GB 安装包全部传过去。而用 Rsync,它会智能地对比一下,发现大部分文件都没变,可能只需要传几个几十 MB 的更新补丁和新增文件就行了,大大节省了时间和带宽!
核心语法与常用选项:
Rsync 的基本语法和 SCP 类似,但它的选项参数极其丰富和强大:
rsync [选项] [源用户名@源主机:]/源路径/ [目标用户名@目标主机:]/目标路径/
特别注意: 源路径末尾是否带斜杠 /
会有很大区别!
- 如果源路径带了斜杠(如
/source/dir/
),Rsync 会复制该目录下的**内容**到目标路径。 - 如果源路径没带斜杠(如
/source/dir
),Rsync 会在目标路径下创建一个与源目录同名的目录,并将源目录及其内容复制到这个新目录里。
常用且强大的选项(这些是 Rsync 的精髓!):
-a
(archive mode - 归档模式): 这是最常用的选项之一!它相当于同时启用了多个有用选项:-rlptgoD
,即:-r
(recursive): 递归同步目录。-l
(links): 保留符号链接。-p
(perms): 保留文件权限。-t
(times): 保留文件修改时间。-g
(group): 保留文件所属组。-o
(owner): 保留文件所有者 (只有超级用户才能在目标端设置所有者)。-D
(devices, specials): 保留设备文件和特殊文件。
-a
就够了。-v
(verbose): 显示详细的输出信息,让你知道 Rsync 正在做什么。建议新手都加上。多次使用 (如-vv
,-vvv
) 会显示更详细的调试信息。-z
(compress): 在传输过程中压缩文件数据。对于文本类文件(如代码、日志、HTML)压缩效果好,能节省带宽,但会增加一点 CPU 开销。对于本身已经压缩过的文件(如 .zip, .jpg, .mp4),效果不大甚至可能起反作用。-P
: 这个选项非常有用!它相当于同时启用了--partial
(保留部分传输的文件,方便断点续传) 和--progress
(显示每个文件的传输进度条)。-h
(human-readable): 以人类可读的格式(如 KB, MB, GB)显示文件大小和传输速率。通常和--progress
一起用。--delete
: 这是一个非常强大但也**非常危险**的选项!它会在同步时,删除目标端存在但源端已不存在的文件,使得目标端成为源端的精确镜像。在使用前务必确认你的源端和目标端路径没有搞反,并且你确实想删除目标端多余的文件! 最好先配合--dry-run
测试。--exclude='PATTERN'
: 排除符合指定模式的文件或目录不进行同步。例如--exclude='*.log'
排除所有 .log 文件,--exclude='tmp/'
排除 tmp 目录。可以多次使用。--include='PATTERN'
: 与--exclude
配合使用,可以更精细地控制包含哪些文件。-n
或--dry-run
: **“演习模式”!** 这是 Rsync 最棒的功能之一!它会模拟整个同步过程,告诉你哪些文件会被传输、哪些会被删除(如果用了--delete
),但并**不会真的执行任何文件操作**。在你执行任何可能修改或删除文件的 Rsync 命令(特别是带--delete
的)之前,强烈建议先用--dry-run
跑一遍,检查输出是否符合你的预期!-e 'ssh -p PORT_NUMBER'
: 如果你的远程服务器 SSH 使用非标准端口,需要用这个选项来指定 SSH 命令和端口。
实战示例:
- 将本地目录完整同步到远程服务器(常用备份场景): 假设要将本地的
/home/myuser/mywebsite/
目录(注意末尾的斜杠,表示同步目录内容)同步到远程服务器remote_host
的/backup/website/
目录下,并显示进度、压缩传输、保留属性: [提示:请将以下代码片段复制并粘贴到 WordPress 的“代码”区块中]rsync -avzPh /home/myuser/mywebsite/ remoteuser@remote_host:/backup/website/
- 从远程服务器将目录同步到本地: [提示:请将以下代码片段复制并粘贴到 WordPress 的“代码”区块中]
rsync -avzPh remoteuser@remote_host:/var/www/production_site/ /home/myuser/site_backup/
- 保持本地和远程目录的精确镜像(远程多余的会被删除!): 再次警告:
--delete
参数非常危险,使用前务必用--dry-run
测试! [提示:请将以下代码片段复制并粘贴到 WordPress 的“代码”区块中]# 先演习一下,看看会发生什么 rsync -avzPhn --delete /local/source_dir/ remoteuser@remote_host:/remote/target_dir/ # 确认无误后,再去掉 -n 参数正式执行 # rsync -avzPh --delete /local/source_dir/ remoteuser@remote_host:/remote/target_dir/
- 通过非标准 SSH 端口 (如 2222) 同步: [提示:请将以下代码片段复制并粘贴到 WordPress 的“代码”区块中]
rsync -avzPh -e 'ssh -p 2222' /local/source_dir/ remoteuser@remote_host:/remote/target_dir/
- 同步时排除特定的文件和目录: [提示:请将以下代码片段复制并粘贴到 WordPress 的“代码”区块中]
rsync -avzPh --exclude='*.tmp' --exclude='cache/' --exclude='.git/' /local/project/ remoteuser@remote_host:/deploy/project/
Rsync 的优点:
- 极其高效的差异同步: 只传输变化的部分,大大节省了时间和带宽,特别适合大文件、大量文件的同步和备份。
- 支持断点续传: 使用
-P
或--partial
选项,如果传输中断,下次可以从中断的地方继续,无需从头再来。 - 选项丰富,控制精细: 可以灵活地控制是否保留权限时间戳、是否压缩、是否删除目标端多余文件、排除特定文件等等。
- 安全可靠: 默认通过 SSH 进行加密传输。
- 用途广泛:不仅是文件传输,更是网站部署、数据备份、目录镜像的“神器”。
Rsync 的缺点:
- 命令选项较多,初次接触时学习曲线比 SCP 稍陡峭一点。
- 源路径末尾是否有斜杠
/
对行为影响很大,新手容易搞混而出错。 - 对于非常小、一次性的文件复制,可能感觉不如 SCP 那么“手起刀落”干脆(但其实也很快)。
总的来说,一旦你掌握了 Rsync 的核心选项和使用方法,它绝对会成为你服务器文件管理工具箱里最得力的干将之一!特别是对于需要**定期同步目录、进行增量备份、或者在不稳定网络下传输大文件**的场景,Rsync 是不二之选。
方法三:SFTP (SSH File Transfer Protocol) - 安全交互的“文件资源管理器”
SFTP 是什么?
SFTP (SSH File Transfer Protocol,有时也叫 Secure File Transfer Protocol) 是一个在 SSH 协议(通常是 SSH-2)之上提供的安全文件传输和管理协议。它与我们前面说的 SCP 和 Rsync 有点不一样:SCP 和 Rsync 通常是一次性执行一个“复制”或“同步”命令就结束了,而 SFTP 则是**启动一个交互式的会话**,让你感觉像是打开了一个远程服务器的“文件资源管理器”,你可以在这个会话里执行多种文件操作。
你可以把它想象成,你不是直接叫快递员(SCP)送个特定包裹,也不是让智能物流系统(Rsync)帮你同步仓库,而是你亲自(通过一个安全的加密通道)走进了远程服务器的“储物间”(文件系统),可以在里面**浏览文件列表、上传文件、下载文件、创建目录、删除文件、修改权限**等等,进行更细致、更交互式的管理。
如何使用 SFTP 命令行客户端?
几乎所有的 Linux 和 macOS 系统都自带了 sftp
命令行客户端。Windows 上也可以通过 Git Bash 或 PuTTY 套件中的 psftp.exe
来使用。
- 连接到远程服务器: [提示:请将以下代码片段复制并粘贴到 WordPress 的“代码”区块中]
sftp remoteuser@remote_host # 如果 SSH 使用非标准端口 (如 2222),用 -P (大写P,和scp一样) # sftp -P 2222 remoteuser@remote_host
连接成功后,你会看到一个sftp>
的提示符,表示你已经进入了 SFTP 的交互模式。 - 常用 SFTP 命令 (很多和 Linux shell 命令或 FTP 命令类似): 在
sftp>
提示符下,你可以使用以下命令:- 导航与查看 (远程服务器):
ls
: 列出当前远程目录的文件和文件夹。 (可以加-l
显示详细信息,-a
显示隐藏文件)cd remote_directory
: 切换远程目录。pwd
: 显示当前所在的远程目录路径。mkdir remote_directory
: 创建远程目录。rmdir remote_directory
: 删除远程空目录。rm remote_file
: 删除远程文件。rename old_name new_name
: 重命名远程文件或目录。
- 导航与查看 (本地电脑,命令前通常加 `l`):
lls
: 列出当前本地目录的文件和文件夹。lcd local_directory
: 切换本地目录。lpwd
: 显示当前所在的本地目录路径。
- 文件传输:
get remote_file [local_target_path]
: 从远程服务器下载文件到本地。如果省略local_target_path
,则下载到当前本地目录。put local_file [remote_target_path]
: 从本地上传文件到远程服务器。如果省略remote_target_path
,则上传到当前远程目录。mget remote_pattern*
: 下载多个匹配模式的文件 (如mget *.txt
)。mput local_pattern*
: 上传多个匹配模式的文件 (如mput *.jpg
)。- 注意: SFTP 的
get
和put
命令如果要传输整个目录,通常需要配合-r
(recursive) 选项,例如get -r remote_directory
。
- 权限与帮助:
chmod XXX remote_file
: 修改远程文件权限 (用法同 Linuxchmod
)。chown UID remote_file
/chgrp GID remote_file
: 修改远程文件所有者/组 (需要你有相应权限)。help
或?
: 显示可用的 SFTP 命令列表。
- 退出:
exit
,quit
, 或bye
: 断开连接并退出 SFTP 会话。
- 导航与查看 (远程服务器):
SFTP 的优点:
- 交互式操作: 非常适合需要浏览远程文件系统、进行多次上传下载、或者进行一些基本文件管理(创建目录、删除、重命名、改权限)的场景。
- 安全性高: 底层完全基于 SSH 协议,所有数据传输(包括命令和文件内容)都是加密的。
- 功能比 SCP 丰富: 提供了比 SCP 更多的文件管理功能,比如断点续传(某些客户端支持)、创建目录、删除文件、修改权限等。
- 广泛的客户端支持: 除了命令行
sftp
,几乎所有的图形化 FTP 客户端(如 FileZilla, WinSCP, Cyberduck, Transmit 等)都内置了对 SFTP 协议的支持,让你可以通过熟悉的图形界面进行安全的文件传输和管理。这是 SFTP 非常受欢迎的一个原因。
SFTP 的缺点:
- 不适合脚本自动化单次传输: 对于只需要简单复制一个文件或目录的自动化脚本,SCP 或 Rsync 的单行命令通常更方便。SFTP 的交互模式不适合直接用在脚本里(虽然也可以通过批处理模式,但较复杂)。
- 同步大型目录效率可能不如 Rsync: SFTP 缺乏 Rsync 那种高效的“差异比较”算法,在同步两个已经存在大部分相同内容的大型目录时,它可能还是会传输很多重复数据,效率不如 Rsync。
总的来说,SFTP 是当你需要一个**安全的、交互式的、像操作本地文件一样管理远程服务器文件**的工具时的绝佳选择。特别是如果你更喜欢图形界面,那么使用支持 SFTP 的 GUI 客户端会非常方便。
总结:为你的“包裹”选择合适的“快递”方式
好了,我们今天认识了 Linux 服务器之间安全高效传输文件的三位“武林高手”:简单直接的“安全快递员” **SCP**,智能高效的“差异同步专家” **Rsync**,以及安全交互的“文件资源管理器” **SFTP**。
它们有什么共同点?那就是都依赖于强大的 **SSH 协议**作为“安全通道”,保证了我们数据传输过程中的机密性和完整性,让我们彻底告别了古老而不安全的 FTP。
那么,到底该用哪个呢?这完全取决于你手头的“包裹”是什么,以及你的“运输需求”是怎样的:
- 如果你只是想快速、安全地**复制单个文件或小目录**,而且不需要考虑断点续传或差异同步,那么语法最简单的 **SCP** 可能就够用了,手起刀落,干净利落。
- 如果你需要**同步两个目录**(特别是内容很多、很大的目录),或者需要进行**增量备份**,或者需要在不稳定的网络下传输大文件并希望能**断点续传**,那么功能强大、效率极高的 **Rsync** 绝对是你的不二之选,它能帮你节省大量的时间和带宽。
- 如果你需要在远程服务器上进行更**复杂的文件管理**,比如先浏览一下目录内容,再决定上传哪些、下载哪些,或者需要创建目录、删除文件、修改权限等,那么启动一个 **SFTP** 交互式会话,或者使用支持 SFTP 的图形化客户端,会让你感觉更像在操作本地文件一样方便。
没有哪个工具是“万能”的,它们各有侧重,各有擅长的领域。掌握了这三个工具的用法,你就能根据不同的场景,灵活地为你的“数据包裹”选择最合适的“安全快递”方式了!
还有疑问?常见问题解答 (FAQs)
- 问: SCP, Rsync, SFTP 这三个工具,哪个传输速度最快? 答: 这个问题没有绝对答案,速度受多种因素影响(网络状况、文件大小和数量、CPU性能、磁盘I/O、是否启用压缩等)。一般经验是: 1) 对于**首次传输一个大文件或一个全新目录**,并且不考虑压缩的情况下,SCP 因为开销较小,有时可能在纯粹的传输速率上略快于 Rsync 或 SFTP。2) 但如果是在**同步已存在大部分相同内容的目录**,或者需要**断点续传**,Rsync 的差异算法和部分传输能力使其**总效率远超** SCP 和 SFTP。3) SFTP 由于其交互性和协议开销,在批量传输大量小文件或单个大文件时,通常不会比优化过的 Rsync 或 SCP 更快。结论: 对于同步和备份,Rsync 几乎总是最高效的;对于简单的一次性复制,SCP 可能略快;SFTP 更侧重交互管理而非极致速度。
- 问: 我用 SCP 传输大文件时,如果网络断了,能恢复吗? 答: 很遗憾,标准的 SCP 命令本身**不支持断点续传**。如果传输中断,你需要从头开始重新传输整个文件。这也是为什么在传输大文件或网络不稳定的情况下,更推荐使用 Rsync(配合
-P
或--partial
选项)的原因,Rsync 可以保留已传输的部分,并在下次传输时从中断处继续。 - 问: 我想每天自动用 Rsync 备份服务器数据到另一台机器,怎么设置? 答: 你可以通过 Linux 的**计划任务 (Cron Job)** 来实现 Rsync 的自动化备份。大致步骤是:1) 确保你已经配置好了从备份源服务器到备份目标服务器的**SSH 免密登录**(使用密钥对),这样 Rsync 执行时就不需要输入密码。2) 编写一个包含你 Rsync 命令的 Shell 脚本(比如
backup.sh
),确保脚本有执行权限。3) 编辑你的 crontab (crontab -e
),添加一条类似这样的记录,让它每天在特定时间(比如凌晨3点)执行你的备份脚本:0 3 * * * /path/to/your/backup.sh >/dev/null 2>&1
(>/dev/null 2>&1
是为了禁止输出,你也可以重定向到日志文件)。 - 问: SFTP 和 FTPS (FTP over SSL/TLS) 有什么区别?哪个更安全? 答: 它们都是安全的文件传输协议,但实现方式不同。SFTP (SSH File Transfer Protocol)** 是 SSH 协议的一个子系统,它完全运行在 SSH 的加密通道之上,只需要开放服务器的 SSH 端口(通常是 22)即可,配置相对简单,安全性与 SSH 本身一样高。而 **FTPS** 则是传统 FTP 协议的扩展,通过 SSL/TLS 来加密 FTP 的控制连接和/或数据连接。FTPS 通常需要开放多个端口(一个用于控制,数据连接端口可能动态或在指定范围),防火墙配置相对复杂一些。安全性方面: 两者如果正确配置,都可以提供很好的安全性。但由于 SFTP 共享 SSH 的端口和认证机制,管理上可能更简洁,也更不容易因为 FTP 协议本身的一些历史遗留问题(如被动模式端口范围)而产生配置困扰。目前,SFTP 因其简洁和与 SSH 的紧密集成,在 Linux/Unix 环境中更为常用。
- 问: 我没有配置 SSH 密钥登录,可以用密码通过 SCP/Rsync/SFTP 传输文件吗? 答: 可以,但不推荐。 这三个工具默认都使用 SSH 进行认证。如果你的服务器允许 SSH 密码登录(即
sshd_config
中PasswordAuthentication yes
),那么你在执行 SCP, Rsync (通过 SSH 模式时), 或 SFTP 连接命令后,系统会提示你输入远程用户的密码。输入正确的密码后即可进行传输。但是,**强烈建议你配置并使用 SSH 密钥认证,并禁用服务器的 SSH 密码登录**。因为密码容易被暴力破解,而密钥认证则安全得多。使用密钥后,这三个工具的传输过程也会更加便捷(无需每次都输密码,除非你的私钥本身设置了密码短语)。