rlogin [选项] 主机名
| 选项 | 说明 |
|---|---|
-8 |
允许8位数据传输 |
-E |
不对字符进行转义 |
-L |
允许rlogin会话在litout模式下运行 |
-d |
启用socket调试 |
-e 字符 |
设置转义字符(默认为~) |
-l 用户名 |
指定登录用户名 |
-p 端口 |
使用指定端口(默认513) |
连接到远程主机:
rlogin remote-host.example.com
如果当前用户名与远程主机上的用户名相同,系统会提示输入密码。
使用特定用户名连接:
rlogin -l username remote-host.example.com
或者使用简写格式:
rlogin username@remote-host.example.com
rlogin支持信任主机机制(通过~/.rhosts文件),但这非常不安全:
# 在远程主机的 ~/.rhosts 文件中添加信任主机
# 格式:主机名 用户名
client-host.example.com client-username
# 然后从客户端可以直接登录,无需密码
rlogin remote-host.example.com
使用SSH替代rlogin的所有功能:
# 基本连接
ssh remote-host.example.com
# 指定用户名
ssh username@remote-host.example.com
ssh -l username remote-host.example.com
# 指定端口
ssh -p 2222 remote-host.example.com
# 启用X11转发(替代rlogin的X转发)
ssh -X remote-host.example.com
# 执行远程命令
ssh remote-host.example.com "ls -la"
使用SSH密钥替代密码和.rhosts信任机制:
# 1. 生成SSH密钥对
ssh-keygen -t rsa -b 4096
# 2. 将公钥复制到远程主机
ssh-copy-id username@remote-host.example.com
# 3. 现在可以无密码登录
ssh username@remote-host.example.com
SSH密钥比.rhosts机制安全得多,因为需要私钥才能认证。
| 特性 | rlogin | SSH | 说明 |
|---|---|---|---|
| 加密传输 | 否 | 是 | SSH加密所有数据,防止窃听 |
| 密码安全 | 明文 | 加密 | rlogin密码可被网络嗅探捕获 |
| 主机验证 | 弱 | 强 | SSH验证主机身份,防止中间人攻击 |
| 端口 | 513 | 22(默认) | 两者都可以配置不同端口 |
| X11转发 | 支持 | 支持 | 两者都支持图形界面转发 |
| 信任机制 | .rhosts(不安全) | SSH密钥(安全) | SSH密钥认证更安全可靠 |
| 数据压缩 | 不支持 | 支持 | SSH支持数据传输压缩 |
在生产环境中禁用rlogin服务:
# 查看rlogin服务状态
sudo systemctl status rlogin # 或 in.rlogin, rlogind
# 停止并禁用rlogin服务
sudo systemctl stop rlogin
sudo systemctl disable rlogin
# 从inetd/xinetd配置中移除(如果使用)
sudo sed -i '/rlogin/d' /etc/inetd.conf
sudo systemctl restart inetd
# 检查rlogin端口是否还在监听
sudo netstat -tulpn | grep :513
sudo ss -tulpn | grep :513
配置安全的SSH服务器:
# 编辑SSH服务器配置
sudo nano /etc/ssh/sshd_config
# 推荐的安全配置:
# 1. 禁用root登录
PermitRootLogin no
# 2. 禁用密码认证,使用密钥
PasswordAuthentication no
PubkeyAuthentication yes
# 3. 限制登录用户
AllowUsers username1 username2
# 4. 更改默认端口(可选)
Port 2222
# 5. 禁用空密码
PermitEmptyPasswords no
# 6. 启用严格模式
StrictModes yes
# 重启SSH服务
sudo systemctl restart sshd
在隔离的测试环境中使用rlogin:
#!/bin/bash
# 在隔离的测试网络中临时启用rlogin进行测试
# 1. 创建隔离的网络命名空间
sudo ip netns add test-net
# 2. 在命名空间中启动rlogin服务
sudo ip netns exec test-net /usr/sbin/in.rlogin
# 3. 测试连接(在同一命名空间中)
sudo ip netns exec test-net rlogin localhost
# 4. 测试完成后清理
sudo ip netns del test-net
维护不支持SSH的旧系统:
#!/bin/bash
# 临时启用rlogin连接旧系统,然后立即迁移到SSH
OLD_SYSTEM="legacy-host.example.com"
echo "正在连接到旧系统: $OLD_SYSTEM"
# 1. 使用rlogin连接到旧系统
rlogin $OLD_SYSTEM << 'EOF'
# 在旧系统上安装SSH
echo "正在安装SSH客户端和服务端..."
# 根据系统类型执行相应命令
# 例如对于Solaris: pkg install openssh
EOF
# 2. 配置SSH
echo "配置SSH服务..."
# 传输SSH配置文件
# 3. 测试SSH连接
ssh $OLD_SYSTEM "echo 'SSH连接成功'"
# 4. 禁用rlogin
ssh $OLD_SYSTEM "sudo svcadm disable rlogin"
rlogin存在多个严重的安全问题:
真实世界攻击示例:
# 攻击者可以在同一网络中捕获rlogin流量
sudo tcpdump -i eth0 -A port 513
# 输出会显示明文用户名和密码
# ... LOGIN username password: secret123 ...
相比之下,SSH提供:端到端加密、强身份验证、数据完整性保护和防止会话劫持。
检测系统中rlogin服务的方法:
# 1. 检查rlogin服务状态
sudo systemctl list-unit-files | grep -i rlogin
sudo systemctl status rlogin 2>/dev/null || echo "rlogin服务未运行"
# 2. 检查端口监听
sudo netstat -tulpn | grep :513
sudo ss -tulpn | grep :513
sudo lsof -i :513
# 3. 检查inetd/xinetd配置
grep -r "rlogin" /etc/inetd.conf /etc/xinetd.d/ 2>/dev/null
# 4. 检查安装的软件包
# Debian/Ubuntu
dpkg -l | grep -i rlogin
# RHEL/CentOS
rpm -qa | grep -i rlogin
# 5. 检查相关文件
ls -la /usr/sbin/in.rlogin /usr/sbin/rlogind 2>/dev/null
ls -la /etc/hosts.equiv /root/.rhosts /home/*/.rhosts 2>/dev/null
安全检查脚本:
#!/bin/bash
echo "=== rlogin安全检查 ==="
echo ""
# 检查端口
echo "1. 检查端口513:"
if sudo ss -tulpn | grep -q :513; then
echo " [危险] 端口513正在监听"
sudo ss -tulpn | grep :513
else
echo " [安全] 端口513未监听"
fi
echo ""
# 检查配置文件
echo "2. 检查配置文件:"
if [ -f /etc/hosts.equiv ]; then
echo " [危险] 发现 /etc/hosts.equiv 文件"
cat /etc/hosts.equiv
fi
find /home /root -name ".rhosts" 2>/dev/null | while read file; do
echo " [危险] 发现信任文件: $file"
done
echo ""
echo "建议:禁用rlogin服务,删除相关配置文件,使用SSH替代"
是的,有多种安全的rlogin替代方案:
1. SSH(最推荐)
2. TLS/SSL包装的rlogin(较少使用)
# 使用stunnel包装rlogin流量
stunnel -c -d 0.0.0.0:5513 -r remote-host:513
# 然后连接本地端口
rlogin localhost -p 5513
3. VPN + rlogin(复杂但安全)
4. 其他远程访问工具
| 工具 | 特点 | 适用场景 |
|---|---|---|
mosh |
移动优化的SSH替代品 | 网络不稳定的移动连接 |
telnet |
类似rlogin,也不安全 | 测试/调试网络服务 |
VNC/RDP |
远程桌面 | 图形界面访问 |
Web SSH |
基于浏览器的SSH客户端 | 无法安装客户端的场景 |
最佳选择:对于所有远程登录需求,SSH是最佳选择。
学习rlogin在以下情况下可能还有意义:
1. 历史知识了解:
2. 维护遗留系统:
3. 安全教学案例:
4. 测试环境:
学习建议:
一句话总结:了解rlogin的历史和缺陷很重要,但在实际工作中应该使用SSH。
/etc/hosts.equiv和所有~/.rhosts文件#!/bin/bash
# 安全加固脚本:禁用rlogin并配置SSH
echo "=== 系统安全加固 ==="
# 1. 停止并禁用rlogin服务
echo "1. 禁用rlogin服务..."
sudo systemctl stop rlogin 2>/dev/null
sudo systemctl disable rlogin 2>/dev/null
# 2. 删除配置文件
echo "2. 删除不安全的配置文件..."
sudo rm -f /etc/hosts.equiv
sudo find /home /root -name ".rhosts" -delete 2>/dev/null
# 3. 配置防火墙
echo "3. 配置防火墙阻止rlogin端口..."
sudo ufw deny 513 # Ubuntu
# 或
sudo firewall-cmd --permanent --remove-port=513/tcp # RHEL/CentOS
sudo firewall-cmd --reload
# 4. 配置SSH
echo "4. 配置安全的SSH..."
sudo sed -i 's/^#*PasswordAuthentication.*/PasswordAuthentication no/' /etc/ssh/sshd_config
sudo sed -i 's/^#*PermitRootLogin.*/PermitRootLogin no/' /etc/ssh/sshd_config
sudo systemctl restart sshd
echo "安全加固完成!"