RSH远程命令执行环境配置全指南

一、RSH协议基础与适用场景

RSH(Remote Shell)是一种基于TCP/IP协议的远程命令执行工具,允许用户在本地主机直接执行远程主机上的命令。相比SSH,RSH采用明文传输且缺乏加密机制,但因其轻量级特性,在受控内网环境中仍被广泛使用于批量管理、监控脚本等场景。

典型应用场景包括:

  1. 跨主机日志收集与系统状态检查
  2. 定时任务在多台主机上的同步执行
  3. 集群环境中的统一配置管理
  4. 自动化运维脚本的远程部署

需特别注意:RSH协议存在安全风险,建议仅在内网隔离环境中使用,并配合防火墙规则限制访问源IP。

二、环境准备与规划

2.1 主机角色定义

假设配置两台主机:

  • 管理主机(ahost):192.168.200.123
  • 被控主机(bhost):192.168.200.200

2.2 网络连通性验证

在开始配置前,需确保:

  1. 双向网络可达(ping测试)
  2. 防火墙开放514/tcp端口(RSH默认端口)
  3. 时间同步(建议配置NTP服务)

验证命令示例:

  1. # 测试网络连通性
  2. ping -c 4 192.168.200.200
  3. # 检查端口开放状态
  4. telnet 192.168.200.200 514

三、主机基础配置

3.1 主机名解析配置

编辑/etc/hosts文件,添加双向解析记录:

管理主机(ahost)配置

  1. 127.0.0.1 localhost ahost
  2. 192.168.200.200 bhost

被控主机(bhost)配置

  1. 127.0.0.1 localhost bhost
  2. 192.168.200.123 ahost

验证配置:

  1. # 在ahost执行
  2. ping bhost
  3. # 在bhost执行
  4. ping ahost

3.2 网络参数配置

修改/etc/sysconfig/network文件(部分系统为/etc/network/interfaces):

管理主机配置

  1. NETWORKING=yes
  2. HOSTNAME=ahost

被控主机配置

  1. NETWORKING=yes
  2. HOSTNAME=bhost

应用配置后重启网络服务:

  1. systemctl restart network
  2. # 或
  3. service networking restart

四、RSH服务专项配置

4.1 服务安装与启动

主流Linux发行版安装命令:

  1. # RHEL/CentOS系统
  2. yum install rsh-server rsh -y
  3. # Debian/Ubuntu系统
  4. apt-get install rsh-client rsh-server -y

启动服务并设置开机自启:

  1. systemctl enable rsh.socket
  2. systemctl start rsh.socket

4.2 访问控制配置

编辑/etc/xinetd.d/rsh文件(部分系统直接编辑/etc/inetd.conf):

  1. service shell
  2. {
  3. socket_type = stream
  4. protocol = tcp
  5. wait = no
  6. user = root
  7. server = /usr/sbin/in.rshd
  8. log_on_failure += USERID
  9. disable = no
  10. # 添加访问控制
  11. only_from = 192.168.200.123
  12. no_access = 192.168.1.0/24
  13. }

关键参数说明:

  • only_from:允许访问的IP段
  • no_access:禁止访问的IP段
  • server:rsh守护进程路径

4.3 用户权限管理

创建允许使用RSH的用户组:

  1. groupadd rshusers
  2. usermod -aG rshusers adminuser

编辑/etc/pam.d/rsh文件,添加认证控制:

  1. auth required pam_securetty.so
  2. auth sufficient pam_rhosts_auth.so
  3. account required pam_nologin.so

五、安全加固措施

5.1 传输层保护

虽然RSH本身不加密,但可通过以下方式增强:

  1. 配置IPSec隧道
  2. 使用VPN隔离网络
  3. 限制服务端口仅内网访问

5.2 访问审计配置

启用详细日志记录:

  1. # 编辑rsyslog配置
  2. echo "authpriv.* /var/log/rsh.log" >> /etc/rsyslog.conf
  3. systemctl restart rsyslog

5.3 定期安全检查

建议配置自动化检查脚本:

  1. #!/bin/bash
  2. # 检查rsh服务状态
  3. if systemctl is-active rsh.socket | grep -q active; then
  4. echo "RSH服务运行中"
  5. fi
  6. # 检查访问控制
  7. grep "only_from" /etc/xinetd.d/rsh

六、功能验证与测试

6.1 基本命令测试

在管理主机执行:

  1. rsh bhost "hostname; uptime"

预期输出:

  1. bhost
  2. 10:30:45 up 15 days, 3:45, 2 users, load average: 0.15, 0.10, 0.05

6.2 批量执行示例

创建批量管理脚本batch_cmd.sh

  1. #!/bin/bash
  2. HOSTS="bhost"
  3. COMMAND="df -h /"
  4. for host in $HOSTS; do
  5. echo "===== $host ====="
  6. rsh $host "$COMMAND"
  7. done

执行效果:

  1. ===== bhost =====
  2. Filesystem Size Used Avail Use% Mounted on
  3. /dev/sda1 50G 20G 28G 42% /

七、常见问题处理

7.1 连接拒绝问题

可能原因:

  1. 服务未启动
  2. 防火墙拦截
  3. 访问控制限制

排查步骤:

  1. # 检查服务状态
  2. systemctl status rsh.socket
  3. # 检查防火墙规则
  4. iptables -L -n | grep 514
  5. # 检查访问控制
  6. grep "disable" /etc/xinetd.d/rsh

7.2 权限不足问题

解决方案:

  1. 确认用户属于rshusers组
  2. 检查/etc/hosts.equiv文件配置
  3. 验证用户家目录的.rhosts文件

典型.rhosts配置:

  1. ahost adminuser

八、替代方案建议

对于新部署环境,建议考虑以下更安全的替代方案:

  1. SSH密钥认证:支持加密传输和更细粒度的访问控制
  2. Ansible:基于SSH的自动化运维平台
  3. SaltStack:支持大规模主机管理的框架
  4. 容器编排工具:如Kubernetes的批量执行功能

九、总结与最佳实践

  1. 最小权限原则:仅开放必要主机的访问权限
  2. 定期审计:每月检查访问日志和配置变更
  3. 网络隔离:将RSH服务限制在管理网段
  4. 过渡方案:对于遗留系统,建议通过VPN封装RSH流量

通过以上配置,可在内网环境中建立安全可靠的RSH远程管理通道。对于安全性要求更高的场景,建议尽快迁移至SSH或其他加密协议方案。