rcp 是 Unix/Linux 系统间远程复制文件的命令,语法类似 cp,但需指定远程主机名和目标路径,它使用 rsh 协议,因安全性低(明文传输)已被更安全的 scp 和 rsync 命令取代。
rcp(Remote Copy Protocol)是一个经典的 Unix/Linux 命令行工具,用于在本地主机与远程主机之间,或两台远程主机之间复制文件或目录,它基于 rsh(Remote Shell)协议工作,是早期网络环境中常用的文件传输工具。
重要安全提示 (⚠️ 必读):rcp 和其依赖的 rsh 不加密传输的数据或登录凭证(用户名/密码),这意味着你的文件内容和密码在网络上以明文形式传输,极易被截获。在现代网络环境中(尤其是互联网或不受信任的网络),强烈建议使用更安全的替代方案:scp(基于 SSH)或 sftp。 仅在绝对安全、隔离的受控网络(如封闭的实验室网络)且了解风险的情况下才考虑使用 rcp。
基本语法格式
rcp [选项] 源文件/目录 目标文件/目录
- 源文件/目录: 要复制的文件或目录路径。
- 目标文件/目录: 复制后文件或目录的目标路径。
路径中指定远程主机:
在路径前加上 远程用户名@远程主机名: 或 远程主机名:(使用当前本地用户名登录远程主机)来指示远程位置。
常用选项
-p:保留(Preserve)源文件的修改时间、访问时间和权限模式(尽可能)。-r:递归(Recursive)复制整个目录及其内容(用于复制目录时必须使用)。-k:请求 Kerberos 认证(如果系统配置支持 Kerberos,可提供比明文密码稍好的安全性,但仍不如 SSH)。-x:启用传输数据的 DES 加密(非常过时且脆弱,不提供实质安全,不推荐依赖)。
核心使用场景与示例
-
从本地复制文件到远程主机:
rcp /path/to/local/file.txt username@remotehost:/path/to/remote/directory/
- 将本地文件
file.txt复制到远程主机remotehost上用户username的家目录下的/path/to/remote/directory/目录中。 - 如果省略
username@,rcp会尝试使用你当前的本地用户名登录远程主机。 - 目标路径末尾的 很重要,它表示目标是一个目录,如果省略且目录不存在,
rcp可能会尝试创建一个同名文件,通常会导致错误。
- 将本地文件
-
从远程主机复制文件到本地:
rcp username@remotehost:/path/to/remote/file.txt /path/to/local/directory/
- 将远程主机
remotehost上用户username的/path/to/remote/file.txt文件复制到本地的/path/to/local/directory/目录下。
- 将远程主机
-
在两台远程主机之间复制文件:
rcp username1@sourcehost:/path/to/source/file.txt username2@destinationhost:/path/to/destination/
- 将源主机
sourcehost上用户username1的文件file.txt复制到目标主机destinationhost上用户username2的/path/to/destination/目录下。 - 执行此操作的主机(你运行命令的本地主机)需要能访问这两台远程主机,并且你在这两台远程主机上需要有相应的权限。
- 将源主机
-
复制整个目录(递归复制):
rcp -r /path/to/local/directory username@remotehost:/path/to/remote/parent/
- 使用
-r选项,将本地目录/path/to/local/directory(包含其所有子目录和文件)递归复制到远程主机remotehost的/path/to/remote/parent/目录下,复制后,远程目录路径将是/path/to/remote/parent/directory/。
- 使用
-
保留文件属性:
rcp -p importantfile.conf username@remotehost:/etc/
- 使用
-p选项,在复制文件importantfile.conf到远程主机的/etc/目录时,尽可能保留其原始修改时间、访问时间和权限位。
- 使用
关键前提条件与配置
rsh/rlogin服务必须启用: 远程主机必须运行rshd或rlogind守护进程(通常在inetd或xinetd中配置)。出于安全原因,现代系统默认通常禁用这些服务。- 主机信任关系: 需要在远程主机的用户家目录下配置信任关系文件:
~/.rhosts: 列出允许访问的主机名 用户名对(一行一个),在remotehost上用户username的~/.rhosts文件中添加yourlocalmachine yourlocalusername,允许用户yourlocalusername从主机yourlocalmachine无需密码登录remotehost的username账户。/etc/hosts.equiv(系统级): 管理员配置,信任整个主机上的所有用户(或特定用户),风险更高。
- 网络连通性: 本地主机与远程主机之间网络必须畅通,且远程主机的
rsh端口(默认 TCP 514)未被防火墙阻止。 - 命令可用性:
rcp命令需要在本地主机和参与操作的远程主机上安装(通常是rsh或openssh-client包的一部分,但后者主要提供scp/ssh)。
为什么强烈推荐 scp 或 sftp 替代 rcp?
- 加密:
scp(Secure Copy) 和sftp(SSH File Transfer Protocol) 基于 SSH (Secure Shell) 协议,对所有传输的数据(包括文件内容和登录凭证)进行强加密,有效防止窃听和中间人攻击。 - 认证: 支持更安全的公钥认证和强密码认证。
- 完整性: 确保传输的数据在过程中未被篡改。
- 功能:
scp语法与rcp高度相似,学习成本低。sftp提供交互式文件管理功能。 - 可用性: SSH 服务 (
sshd) 是现代 Unix/Linux 系统的标准配置,安全性高且默认启用。
scp 基本语法示例 (强烈推荐使用):
scp -p /path/to/local/file.txt username@remotehost:/path/to/remote/directory/ # 复制到远程 scp -p -r username@remotehost:/path/to/remote/directory/ /path/to/local/ # 从远程复制目录 scp -p user1@host1:/file.txt user2@host2:/destination/ # 主机间复制
注意事项总结
- 首要安全警告:
rcp不安全! 仅在绝对可信、隔离的网络中使用,否则,务必使用scp或sftp。 - 权限: 执行
rcp的用户必须在源位置有读取权限,在目标位置有写入权限。 - 路径: 正确使用绝对路径或相对于用户家目录的路径( 在
rcp命令中可能不会被远程 shell 正确解析,建议使用绝对路径)。 - 目录斜杠: 复制目录时,源目录名后不加斜杠复制的是目录本身;加斜杠复制的是目录内容,目标路径末尾加斜杠明确指定为目录。
- 配置复杂: 设置
.rhosts或hosts.equiv需要谨慎,配置错误可能导致安全漏洞。 - 过时性:
rcp已被更安全、功能更丰富的工具(scp,sftp,rsyncover SSH)广泛取代。
虽然 rcp 在历史上用于简单的远程文件复制,但其固有的安全性缺陷(明文传输) 使其在现代计算环境中极不推荐使用,理解 rcp 的语法和工作原理有助于阅读遗留脚本或文档,但在进行任何实际的远程文件操作时,应始终优先选择基于 SSH 的安全替代品 scp 或 sftp,它们提供了 rcp 的所有基本功能,并在此基础上增加了至关重要的加密和强认证机制,是保护系统和数据安全的必要实践。
引用与说明:
- 基于 Unix System V 和 BSD 派生的
rcp命令标准实现文档。 - 安全警告依据 NIST (SP 800-123)、CIS 等机构关于安全 Shell 和淘汰不安全协议的建议。
scp/sftp推荐依据 OpenSSH 项目文档及广泛认可的最佳安全实践。- 具体命令选项和行为的描述参考了
man rcp(手册页) 的核心内容。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/4936.html