Linux命令-rsh(远程 Shell —— r-command 家族,严重过时,请用 ssh)

📅 2026/7/17 12:13:07
Linux命令-rsh(远程 Shell —— r-command 家族,严重过时,请用 ssh)
Linux命令-rsh远程 Shell —— r-command 家族严重过时请用 ssh 简介安装位置与状态 语法⚙️ 选项 示例仅作历史参考示例 1基本用法 —— 执行远程命令示例 2启动远程交互式 Shell示例 3数据重定向与管道示例 4信任配置文件示例 5后台执行远程任务⚠️ 注意rsh 的五大安全漏洞rsh → ssh 迁移对照免密登录的正确方式SSHrsh 协议的技术细节 总结 相关命令快速参考rshRemote Shell是 BSD UNIX 时代用于在远程主机上执行命令或启动交互式 Shell 的工具。它基于.rhosts文件实现无密码信任认证或通过rexec协议传输密码。所有通信不加密rsh已被ssh完全取代。本文仅作为历史参考资料。 简介rsh诞生于 1980 年代的 BSD UNIX是 r-command 工具集rsh、rlogin、rcp、rexec的核心成员。在当时的局域网环境中rsh为系统管理员提供了便捷的远程操作方式。然而其设计完全没有考虑安全性 —— 无论是认证机制基于 IP/主机名信任还是数据传输无加密在现代标准下都不堪一击。安装位置与状态# 在不同发行版上查看 rsh 的状态whichrsh2/dev/null||echorsh 未安装# 输出# 现代系统中通常rsh 未安装 或 /usr/bin/rsh需手动安装# 查看 rsh 所属软件包# CentOS/RHEL 7rpm-qf/usr/bin/rsh2/dev/null# 输出rsh-0.17-76.el7.x86_64# Debian/Ubuntudpkg-S/usr/bin/rsh2/dev/null# 输出rsh-client: /usr/bin/rsh# 查看包描述# CentOS/RHELrpm-qirsh# 摘要Clients for remote access commands (rsh, rlogin, rcp).# Debian/Ubuntuaptshow rsh-client2/dev/null|head-5# 输出# Package: rsh-client# Description: client programs for remote shell connections# This package contains rsh, rcp and rlogin. 语法rsh [选项] 主机 [命令]参数说明主机远程主机名或 IP 地址命令要在远程主机上执行的命令省略则启动交互式 Shell⚙️ 选项选项说明-l 用户名指定远程登录用户名默认使用本地用户名-n将 stdin 重定向到 /dev/null后台执行时必需-d启用 socket 调试输出-x启用 X11 转发不安全信息未加密⚠️严重警告rsh基于.rhosts和/etc/hosts.equiv的信任机制。任何能够在网络上伪造 IP 地址的人都可以冒充受信任主机无需密码即可执行远程命令。 示例仅作历史参考示例 1基本用法 —— 执行远程命令# 在远程主机 server01 上执行 whoamirsh server01whoami# 输出myuser# 无需密码基于 .rhosts 信任# 指定不同的用户名rsh-lroot server01uptime# 输出14:32:10 up 45 days, 3:22, 5 users, load average: 0.15, 0.10, 0.08# 执行多条命令用分号分隔rsh server01hostname; date; who | wc -l# 输出# server01# Mon Jun 14 14:35:22 CST 2026# 5示例 2启动远程交互式 Shell# 启动远程交互式 Shell不指定命令rsh-ladmin server01# 成功连接后进入远程 Shell# [adminserver01 ~]$# [adminserver01 ~]$ pwd# /home/admin# [adminserver01 ~]$ exit# logout# Connection to server01 closed.示例 3数据重定向与管道# 将远程命令输出重定向到本地文件rsh server01cat /etc/hostsremote_hosts.txtcatremote_hosts.txt# 输出# 127.0.0.1 localhost localhost.localdomain# ::1 localhost localhost.localdomain# 192.168.1.100 server01.example.com server01# 通过管道处理远程数据rsh server01ls -la /var/log/|grepJun# 输出# -rw-r--r-- 1 root root 12345 Jun 14 14:30 messages# -rw-r--r-- 1 root root 6789 Jun 14 14:31 secure# 将本地数据发送到远程catlocal_script.sh|rsh server01cat /tmp/remote_script.sh; chmod x /tmp/remote_script.sh; /tmp/remote_script.sh示例 4信任配置文件# rsh 信任机制的核心配置文件# /etc/hosts.equiv系统级信任# 格式主机名 [用户名]cat/etc/hosts.equiv# 示例内容# server01 # 信任 server01 上所有用户# server02 myuser # 只信任 server02 上的 myuser# server03 # 信任 server03 上所有用户等同于只写主机名# ~/.rhosts用户级信任# 格式主机名 [用户名]cat~/.rhosts# 示例内容# backup-server backup # 允许 backup-server 上的 backup 用户访问# 172.16.0.10 admin # 允许指定IP上的 admin 用户访问# ⚠️ 安全规则# 1. ~/.rhosts 文件权限必须是 600仅所有者可读写# 2. 如果 ~/.rhosts 权限过宽rsh 会拒绝使用chmod600~/.rhosts# 3. /etc/hosts.equiv 和 ~/.rhosts 第 0 列不能是 # 含有 等同于信任全世界 —— 极度危险示例 5后台执行远程任务# 在远程主机上后台执行长时间任务rsh-nserver01find /data -name *.log -mtime 30 -exec rm {} \;# 输出[1] 23456# 本地终端不会被阻塞# 查看本地后台任务状态jobs# 输出[1] Running rsh -n server01 find /data ... # 等待远程任务完成wait$!echo远程任务完成退出码:$?# 输出远程任务完成退出码: 0⚠️ 注意rsh 的五大安全漏洞# 漏洞1明文传输# rsh 的所有数据包括命令、输出均以明文形式传输# 任何人抓包即可看到完整内容sudotcpdump-ieth0 port514-X# 16:32:10.234567 IP client server.514: ...# 0x0000: 726f 6f74 0072 6f6f 7400 6c73 202d 6c61 root.root.ls -la# 漏洞2IP 欺骗# rsh 仅凭源 IP 判断是否可信# 攻击者可伪造源 IP 冒充受信任主机# 漏洞3无服务器身份验证# 你无法确认连接的是真实服务器还是冒牌货# 中间人攻击完全可行# 漏洞4会话劫持# TCP 514 端口的会话可以被劫持# 漏洞5.rhosts 权限问题# 如果配置了 信任所有人等同于敞开大门rsh → ssh 迁移对照# 命令对照表 # rsh 用法 → ssh 等效用法# # rsh host command → ssh host command# rsh -l user host command → ssh userhost command# rsh host → ssh host# rsh -n host command → ssh -f host command# rcp file host:/path → scp file host:/path# rlogin host → ssh host# 配置文件对照 # rsh: /etc/hosts.equiv ~/.rhosts# ssh: /etc/ssh/ssh_config ~/.ssh/config# 免密配置对照 # rsh: 编辑 .rhosts不安全# ssh: ssh-keygen ssh-copy-id安全免密登录的正确方式SSH# rsh 的无密码登录版本基于主机信任已被淘汰# 正确做法使用 SSH 公钥认证# 1. 生成 SSH 密钥对ssh-keygen-ted25519-f~/.ssh/id_ed25519-N# 输出# Generating public/private ed25519 key pair.# Your identification has been saved in ~/.ssh/id_ed25519.# Your public key has been saved in ~/.ssh/id_ed25519.pub.# 2. 复制公钥到远程服务器ssh-copy-id-i~/.ssh/id_ed25519.pub userserver01# 输出# /usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s)...# Number of key(s) added: 1# 3. 测试无密码登录sshuserserver01hostname; date# 输出# server01# Mon Jun 14 14:35:22 CST 2026# ✅ 无需密码# 4. SSH 配置简化cat~/.ssh/configEOF Host server01 HostName 192.168.1.100 User admin IdentityFile ~/.ssh/id_ed25519 StrictHostKeyChecking accept-new EOFrsh 协议的技术细节# rsh 客户端使用 TCP 514 端口# rsh 的工作流程# 1. 客户端连接到服务端的 TCP 514 端口# 2. 服务端检查客户端来源地址# 3. 服务端检查 /etc/hosts.equiv 和 ~/.rhosts# 4. 服务端通过保留端口512-1023进行反向连接验证# 客户端需使用 1024 的源端口才能通过验证# 5. 建立连接后发送命令并在远程执行# rsh 在 /etc/inetd.conf 中的配置现代系统已不存在grep-rshell/etc/inetd.conf2/dev/null||echoinetd 未配置或不存在# 传统配置示例# shell stream tcp nowait root /usr/sbin/in.rshd in.rshd# 查看是否监听了 514 端口现代系统通常没有ss-tlnp|grep514# 输出(通常为空说明 rshd 没有运行) 总结rsh是计算机网络前安全时代的产物它的消亡标志着安全意识的根本性转变核心缺陷无加密、基于 IP 信任的认证、易受多种网络攻击历史意义揭示了远程管理工具中认证加密和传输加密的必要性演进方向SSH 协议在 rsh 的基础上增加了密钥协商、加密通信、服务器认证等安全层实用结论永远不要在联网环境中使用 rsh 及其姐妹命令rexec、rlogin、rcp安全不是一个附加功能而是系统工具的基本属性。rsh 的存在本身就是这一定理最有力的证明。 相关命令命令说明ssh安全替代方案远程加密 Shellrexecrsh 的姐妹命令远程执行同样已废弃rlogin远程登录r-command 家族成员已废弃rcp远程文件复制已废弃用 scpscp基于 SSH 的安全文件复制ssh-keygen生成 SSH 密钥对ssh-copy-id复制公钥到远程主机telnet另一个不安全的远程连接协议