如何用rcp在Linux间复制文件?

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 加密(非常过时且脆弱,不提供实质安全,不推荐依赖)。

核心使用场景与示例

  1. 从本地复制文件到远程主机:

    rcp /path/to/local/file.txt username@remotehost:/path/to/remote/directory/
    • 将本地文件 file.txt 复制到远程主机 remotehost 上用户 username 的家目录下的 /path/to/remote/directory/ 目录中。
    • 如果省略 username@rcp 会尝试使用你当前的本地用户名登录远程主机。
    • 目标路径末尾的 很重要,它表示目标是一个目录,如果省略且目录不存在,rcp 可能会尝试创建一个同名文件,通常会导致错误。
  2. 从远程主机复制文件到本地:

    rcp username@remotehost:/path/to/remote/file.txt /path/to/local/directory/
    • 将远程主机 remotehost 上用户 username/path/to/remote/file.txt 文件复制到本地的 /path/to/local/directory/ 目录下。
  3. 两台远程主机之间复制文件:

    rcp username1@sourcehost:/path/to/source/file.txt username2@destinationhost:/path/to/destination/
    • 将源主机 sourcehost 上用户 username1 的文件 file.txt 复制到目标主机 destinationhost 上用户 username2/path/to/destination/ 目录下。
    • 执行此操作的主机(你运行命令的本地主机)需要能访问这两台远程主机,并且你在这两台远程主机上需要有相应的权限。
  4. 复制整个目录(递归复制):

    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/
  5. 保留文件属性:

    rcp -p importantfile.conf username@remotehost:/etc/
    • 使用 -p 选项,在复制文件 importantfile.conf 到远程主机的 /etc/ 目录时,尽可能保留其原始修改时间、访问时间和权限位。

关键前提条件与配置

  1. rsh/rlogin 服务必须启用: 远程主机必须运行 rshdrlogind 守护进程(通常在 inetdxinetd 中配置)。出于安全原因,现代系统默认通常禁用这些服务。
  2. 主机信任关系: 需要在远程主机的用户家目录下配置信任关系文件:
    • ~/.rhosts 列出允许访问的 主机名 用户名 对(一行一个),在 remotehost 上用户 username~/.rhosts 文件中添加 yourlocalmachine yourlocalusername,允许用户 yourlocalusername 从主机 yourlocalmachine 无需密码登录 remotehostusername 账户。
    • /etc/hosts.equiv (系统级): 管理员配置,信任整个主机上的所有用户(或特定用户),风险更高。
  3. 网络连通性: 本地主机与远程主机之间网络必须畅通,且远程主机的 rsh 端口(默认 TCP 514)未被防火墙阻止。
  4. 命令可用性: rcp 命令需要在本地主机和参与操作的远程主机上安装(通常是 rshopenssh-client 包的一部分,但后者主要提供 scp/ssh)。

为什么强烈推荐 scpsftp 替代 rcp

  1. 加密: scp (Secure Copy) 和 sftp (SSH File Transfer Protocol) 基于 SSH (Secure Shell) 协议,对所有传输的数据(包括文件内容和登录凭证)进行强加密,有效防止窃听和中间人攻击。
  2. 认证: 支持更安全的公钥认证和强密码认证。
  3. 完整性: 确保传输的数据在过程中未被篡改。
  4. 功能: scp 语法与 rcp 高度相似,学习成本低。sftp 提供交互式文件管理功能。
  5. 可用性: 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/ # 主机间复制

注意事项总结

  1. 首要安全警告: rcp 不安全! 仅在绝对可信、隔离的网络中使用,否则,务必使用 scpsftp
  2. 权限: 执行 rcp 的用户必须在源位置有读取权限,在目标位置有写入权限。
  3. 路径: 正确使用绝对路径或相对于用户家目录的路径( 在 rcp 命令中可能不会被远程 shell 正确解析,建议使用绝对路径)。
  4. 目录斜杠: 复制目录时,源目录名后不加斜杠复制的是目录本身;加斜杠复制的是目录内容,目标路径末尾加斜杠明确指定为目录。
  5. 配置复杂: 设置 .rhostshosts.equiv 需要谨慎,配置错误可能导致安全漏洞。
  6. 过时性: rcp 已被更安全、功能更丰富的工具(scp, sftp, rsync over SSH)广泛取代。

虽然 rcp 在历史上用于简单的远程文件复制,但其固有的安全性缺陷(明文传输) 使其在现代计算环境中极不推荐使用,理解 rcp 的语法和工作原理有助于阅读遗留脚本或文档,但在进行任何实际的远程文件操作时,应始终优先选择基于 SSH 的安全替代品 scpsftp,它们提供了 rcp 的所有基本功能,并在此基础上增加了至关重要的加密和强认证机制,是保护系统和数据安全的必要实践。


引用与说明:

  • 基于 Unix System V 和 BSD 派生的 rcp 命令标准实现文档。
  • 安全警告依据 NIST (SP 800-123)、CIS 等机构关于安全 Shell 和淘汰不安全协议的建议。
  • scp/sftp 推荐依据 OpenSSH 项目文档及广泛认可的最佳安全实践。
  • 具体命令选项和行为的描述参考了 man rcp (手册页) 的核心内容。

原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/4936.html

(0)
酷番叔酷番叔
上一篇 2025年6月18日 19:38
下一篇 2025年6月18日 20:02

相关推荐

  • macOS必备,sz命令传文件技巧

    在 macOS 上,首先通过 Homebrew 安装 lrzsz:运行 brew install lrzsz,安装后,在终端使用 sz 文件名 发送文件,接收端需支持 ZMODEM 协议。

    1天前
    400
  • 路由器时间不准?CLI秒查方法!

    登录路由器CLI后,进入特权模式(通常用enable命令),然后输入show clock命令即可查看系统当前时间及时区信息。

    5天前
    400
  • Mac如何打开终端?

    在Mac上打开终端的方法: ,1. 打开「启动台」→「其他」文件夹→点击「终端」图标 ,2. 按 Command+空格 打开聚焦搜索,输入”终端”回车 ,3. 进入「访达」→「应用程序」→「实用工具」→双击「终端」 ,启动后即可使用命令行操作。

    5天前
    1000
  • CAD光标旁烦人提示框如何关闭?

    在AutoCAD等CAD软件中输入命令时,光标旁自动弹出的命令建议方框或选项列表(动态输入/自动完成功能),虽为辅助设计,但可能遮挡视线或干扰操作,可通过设置关闭此功能。

    2025年6月23日
    1400
  • 如何用DIV快速开发网页命令行终端?

    核心实现原理通过HTML/CSS/JavaScript模拟命令行交互:结构层:使用<div>容器构建终端界面交互层:JavaScript捕获键盘事件并处理命令视觉层:CSS模拟终端光标和复古风格安全机制:沙盒化命令执行环境HTML结构搭建<div class="terminal&qu……

    2025年6月27日
    1000

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信