菜鸟科技网

Linux rsh命令安全吗?替代方案有哪些?

rshRemote Shell 的缩写,它是一个允许用户在远程主机上执行命令的古老工具,在它出现之后,为了更安全,人们开发了 ssh (Secure Shell),并逐渐取代了 rsh

Linux rsh命令安全吗?替代方案有哪些?-图1
(图片来源网络,侵删)

尽管 rsh 已经非常过时且不安全,但在一些特定的、封闭的内部网络环境中(某些集群系统或遗留的自动化脚本中),你仍然可能会遇到它,了解它的工作原理和配置方式仍然是有价值的。


rsh 是什么?

rsh 是一个客户端/服务器程序,它允许你在本地机器上执行远程机器上的命令,并将命令的输出返回到你的本地终端。

核心特点:

  • 不安全:所有数据(包括用户名、密码、执行的命令和所有输出)都以明文形式在网络中传输,这极易被窃听(sniffing)和中间人攻击。
  • 基于信任rsh 的认证机制非常简单,它不使用密码,而是依赖于 .rhosts 文件和 /etc/hosts.equiv 文件来建立信任关系,如果信任关系建立,你就可以无需密码直接登录。
  • 功能单一:主要用于执行单条命令,不像 ssh 那样可以提供一个完整的交互式 shell 会话。

rsh 的工作原理(认证流程)

rsh 的认证流程是其最核心也最不安全的部分:

Linux rsh命令安全吗?替代方案有哪些?-图2
(图片来源网络,侵删)
  1. 当你在本地机器上执行 rsh remote_host command 时,rsh 客户端会连接到远程主机的 rshd (Remote Shell Daemon) 服务端口(通常是 514)。
  2. rshd 服务会检查两个文件来确定是否允许连接:
    • /etc/hosts.equiv (系统级信任文件)
    • ~/.rhosts (用户级信任文件, 代表用户的主目录)
  3. 认证规则:
    • 如果远程主机名(或 IP 地址)和本地用户名都出现在上述任一文件的一行中,并且该行以 开头(表示该用户不被允许),或者没有 (表示允许),则认证通过。
    • 示例: 在远程主机 serverB/etc/hosts.equiv 文件中有一行 serverA myuser,这意味着来自 serverA 机器的 myuser 用户可以无需密码登录 serverB
    • 如果系统级文件 /etc/hosts.equiv 中没有允许的条目,rshd 会继续检查目标用户主目录下的 ~/.rhosts 文件。
    • 如果两个文件都没有找到允许的条目,或者找到了禁止的条目(以 开头),认证失败,连接被拒绝。

认证成功后rshd 会在远程主机上启动一个 shell,并执行你指定的命令,然后将命令的标准输入、输出和错误流都重定向回本地客户端。


如何配置和使用 rsh

1 安装 rsh 客户端和服务器

在大多数现代 Linux 发行版中,rsh 默认没有安装,你需要分别安装客户端和服务器。

  • 在 Debian/Ubuntu 上:

    # 安装客户端
    sudo apt-get install rsh-client
    # 安装服务器
    sudo apt-get install rsh-server
  • 在 CentOS/RHEL/Fedora 上:

    Linux rsh命令安全吗?替代方案有哪些?-图3
    (图片来源网络,侵删)
    # 安装客户端 (通常包含在 `rsh` 包中)
    sudo yum install rsh
    # 安装服务器
    sudo yum install rsh-server

2 启动 rsh 服务

安装后,你需要启用并启动 rshd 服务。

  • 对于使用 systemd 的系统 (如 Ubuntu 16.04+, CentOS 7+):

    # 启动服务
    sudo systemctl start rsh.socket
    # 设置开机自启
    sudo systemctl enable rsh.socket
    # 检查服务状态
    sudo systemctl status rsh.socket

3 配置信任关系(关键步骤)

假设你想要从本地主机 client.local 上的用户 alice 无密码登录到远程主机 server.local 上的用户 bob

步骤 1:在远程主机 server.local 上操作

  1. bob 用户身份登录 server.local

  2. bob 的主目录下创建或编辑 ~/.rhosts 文件。

    # 切换到 bob 用户
    su - bob
    # 创建 .rhosts 文件
    vi ~/.rhosts
  3. ~/.rhosts 文件中添加一行,格式为 本地主机名 本地用户名

    # 内容如下
    client.local alice
    • 重要提示.rhosts 文件的权限必须非常严格,否则 rshd 会拒绝使用它进行认证,通常设置为 600 (仅所有者可读写)。
      chmod 600 ~/.rhosts

步骤 2:可选 - 配置系统级信任

如果你想允许 aliceclient.local 登录到 server.local 上的所有用户,可以在 server.local 上编辑 /etc/hosts.equiv 文件。

# 使用 root 权限编辑
sudo vi /etc/hosts.equiv

添加一行:

client.local
  • 警告:系统级信任非常危险,它会降低整个系统的安全性。

4 使用 rsh 命令

配置完成后,你就可以在 client.local 上使用了。

# 语法: rsh [远程主机] [要执行的命令]
# 示例1:执行一个简单命令
rsh server.local "ls -l /home/bob"
# 示例2:执行一个交互式命令(注意,有些命令可能无法正常工作)
rsh server.local "top -n 1" # 只显示 top 的第一屏
# 示例3:不指定命令,会启动一个远程 shell(体验很差)
rsh server.local
# 在远程 shell 中执行命令,退出后会回到本地

rsh vs. ssh:为什么应该永远使用 ssh

特性 rsh (Remote Shell) ssh (Secure Shell)
安全性 极不安全,所有数据明文传输 非常安全,所有数据加密传输
认证方式 基于 .rhosts / hosts.equiv,无密码 基于密码、公钥密钥、双因素认证等
端口 514 22
功能 主要执行单条命令 提供交互式 shell、文件传输、端口转发等
加密 强加密(如 AES, 3DES)
现代性 过时、废弃 行业标准、广泛使用
配置文件 .rhosts, /etc/hosts.equiv ~/.ssh/config, /etc/ssh/ssh_config

除非你被迫维护一个非常古老的系统,否则绝对不要使用 rsh,它是一个巨大的安全漏洞,所有使用 rsh 的场景都应该被 ssh 替代。


安全警告和最佳实践

  1. 绝对不要在互联网上使用 rsh:任何在公网上使用 rsh 的行为都等同于将你的系统密码和操作内容直接广播给任何人。
  2. 最小化信任范围:如果必须使用 rsh,只在绝对必要的情况下设置信任关系,并且只授予最小的权限,避免使用系统级的 /etc/hosts.equiv
  3. 检查文件权限:始终确保 .rhosts 文件的权限是 600,如果权限过于宽松(如 644),rshd 会忽略该文件。
  4. 监控日志rsh 的连接尝试和成功/失败记录通常在 /var/log/auth.log (Debian/Ubuntu) 或 /var/log/secure (CentOS/RHEL) 中,监控这些日志可以帮助你发现未授权的访问尝试。
  5. 迁移到 ssh:最好的实践是彻底停止使用 rsh,对于脚本,可以将 rsh 替换为 ssh 并使用 SSH 密钥对进行无密码登录,这既安全又方便。
    • rsh server.local "command" -> ssh user@server.local "command"

rsh 是一个历史产物,了解它有助于理解网络工具的演进,但在实际应用中,它应该被完全遗弃。

分享:
扫描分享到社交APP
上一篇
下一篇