在Linux和Unix系统中,远程 shell(rsh)是一种传统的远程管理工具,允许用户在一台计算机上执行另一台计算机上的命令,虽然出于安全考虑,rsh已被更安全的SSH协议取代,但在某些特定场景(如测试环境、内网开发等),配置虚拟机之间的rsh互通仍具有一定的实用价值,本文将详细介绍如何在虚拟机环境中实现rsh互通的配置步骤、注意事项及常见问题解决方法。

rsh服务的基本原理
rsh协议基于客户端/服务器模型,由rshd(守护进程)和rsh(客户端工具)组成,其工作流程如下:客户端向服务器发送执行请求,服务器验证客户端的权限后,在新的shell中执行命令,并将结果返回给客户端,rsh的认证机制较为简单,主要依赖两个文件:/etc/hosts.equiv(信任主机列表)和用户主目录下的.rhosts文件(信任用户列表),若客户端主机或用户位于信任列表中,则无需密码即可远程执行命令。
虚拟机环境准备
在配置rsh互通前,需确保虚拟机满足以下基础条件:
- 网络连通性:所有虚拟机需处于同一网络中(如NAT模式或Host-Only模式),并可通过IP地址互相ping通,可通过
ifconfig或ip addr命令查看虚拟机IP,使用ping <目标IP>测试网络连通性。 - rsh服务安装:在虚拟机中安装rsh相关软件包,以CentOS/RHEL为例,执行
yum install rsh rsh-server;对于Ubuntu/Debian系统,使用apt-get install rsh-server rsh-client,安装后,确认rshd服务已启动:systemctl status rshd(CentOS 7+)或service rshd status(Ubuntu)。
配置信任关系实现互通
rsh的信任配置分为全局信任和用户信任两种方式,可根据实际需求选择。
全局信任配置(/etc/hosts.equiv)
在需要互通的每台虚拟机上编辑/etc/hosts.equiv文件,添加信任的主机名或IP地址。
# 允许所有虚拟机访问
192.168.56.101
192.168.56.102
test-vm-01
注意:该文件为空时表示拒绝所有非信任主机,添加符号表示允许所有主机(不推荐,存在安全风险),配置完成后,需确保文件权限为644(chmod 644 /etc/hosts.equiv)。
用户级信任配置(.rhosts文件)
若仅需特定用户实现rsh互通,可在用户主目录下创建.rhosts文件,格式为<远程主机> <用户名>,在虚拟机A的用户test的主目录下:
# 允许虚拟机B的test用户无密码访问
192.168.56.102 test
test-vm-02 test
关键点:.rhosts文件的权限必须为600(chmod 600 .rhosts),否则rshd服务会忽略该文件。

防火墙与SELinux配置
防火墙和SELinux可能阻止rsh连接,需进行相应调整。
防火墙配置
以CentOS 7+的firewalld为例,执行以下命令开放rsh端口(TCP 514):
firewall-cmd --permanent --add-port=514/tcp firewall-cmd --reload
对于Ubuntu的ufw,可通过ufw allow 514/tcp开放端口。
SELinux配置
若系统启用了SELinux,需设置rsh相关的布尔值或上下文:
setsebool -P rsh_disable_trans=1 # 允许rsh服务 chcon -R -t rsh_exec_t /usr/bin/rsh # 修复rsh命令上下文
或临时关闭SELinux(测试环境):setenforce 0。
测试rsh互通
完成配置后,可通过以下命令测试rsh是否正常工作:
- 远程执行命令:在虚拟机A中执行
rsh <虚拟机B的IP> "ls -l",若能返回虚拟机B的目录列表,则表示配置成功。 - 远程登录:使用
rlogin <虚拟机B的IP>尝试远程登录,输入对应用户密码(若配置了信任关系则无需密码)。 - 查看服务日志:若连接失败,可检查
/var/log/secure(CentOS)或/var/log/auth.log(Ubuntu)中的错误信息,常见问题包括权限配置错误、防火墙拦截或服务未启动。
安全注意事项
尽管rsh配置简单,但其明文传输认证信息且缺乏加密机制,存在较大安全隐患,在实际应用中需注意:

- 限制使用范围:仅在可信的内网环境中使用,避免暴露在公网。
- 最小权限原则:仅配置必要的信任关系,避免使用符号开放所有权限。
- 替代方案:若安全性要求较高,建议使用SSH协议,可通过
ssh-keygen生成密钥对实现免密登录,同时支持数据加密传输。
常见问题与解决方案
-
问题:
rsh: Connection refused
原因:rshd服务未启动或防火墙拦截。
解决:检查服务状态(systemctl start rshd),确认防火墙规则。 -
问题:
Permission denied
原因:/etc/hosts.equiv或.rhosts文件权限错误,或客户端不在信任列表中。
解决:调整文件权限(644或600),检查主机名/IP是否正确。 -
问题:
rsh: <主机名>: Unknown host
原因:DNS解析失败或hosts文件未配置。
解决:在/etc/hosts中添加主机名与IP的映射关系。
通过以上步骤,即可在虚拟机环境中实现稳定、安全的rsh互通,尽管rsh已逐渐被更现代的工具取代,但理解其配置原理和机制仍有助于维护遗留系统或在特定场景下提升管理效率,在实际操作中,务必结合安全需求权衡利弊,选择最适合的远程管理方案。





