CentOS 6.4 作为一款经典的 Linux 发行版,至今仍被部分企业和开发者用于特定的生产环境或测试场景,SSH(Secure Shell)作为远程管理服务器的核心工具,其配置与使用对于系统管理员至关重要,本文将详细介绍在 CentOS 6.4 系统中 SSH 的安装、配置、安全优化及常见问题处理,帮助用户高效、安全地通过 SSH 远程管理服务器。
SSH 服务的基础安装与启动
在 CentOS 6.4 中,SSH 服务通常由 OpenSSH 软件包提供,默认情况下,系统可能未安装 SSH 服务,因此需要手动安装,通过 yum 包管理器检查是否已安装 OpenSSH 相关组件,执行命令 rpm -qa | grep openssh,若未显示任何结果,则需安装 openssh-server、openssh-clients 和 openssh 包,openssh-server 提供 SSH 服务端功能,openssh-clients 提供 SSH 客户端工具,如 ssh、scp 等。
安装完成后,启动 SSH 服务并设置开机自启,使用命令 service sshd start 启动服务,通过 chkconfig sshd on 将服务添加到开机启动项,为确保服务正常运行,可执行 service sshd status 检查服务状态,若显示 "running" 则表示启动成功,建议通过 netstat -tuln | grep 22 确认 SSH 服务默认监听的 22 端口是否已开启监听。
SSH 服务的基本配置优化
SSH 服务的配置文件位于 /etc/ssh/sshd_config,通过修改该文件可灵活调整服务参数,建议备份原始配置文件,执行 cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak,随后使用文本编辑器(如 vi 或 nano)打开配置文件,进行以下基础优化:
- 修改默认端口:默认端口 22 易受自动化攻击,可将其修改为其他高位端口(如 2222),修改
Port 22为Port 2222,并确保防火墙允许新端口的访问。 - 禁止 root 用户直接登录:提升系统安全性,设置
PermitRootLogin no,强制管理员通过普通用户登录后切换至 root。 - 启用密钥认证:关闭密码认证,仅允许密钥登录,在配置文件中设置
PasswordAuthentication no,并确保PubkeyAuthentication yes已启用。 - 限制登录用户:通过
AllowUsers user1 user2或DenyUsers user3指定允许或禁止登录的用户列表,减少潜在风险。
配置修改后,需重启 SSH 服务使生效,执行 service sshd restart,首次修改端口或禁用 root 登录时,建议保持当前终端会话开启,避免因配置错误导致无法远程连接。
SSH 密钥对的生成与使用
密钥认证相比密码认证更安全,可有效防止暴力破解,在客户端生成 RSA 密钥对,执行 ssh-keygen -t rsa -b 4096,根据提示设置密钥保存路径(默认为 ~/.ssh/id_rsa)和密码短语(可选),生成后,公钥文件为 id_rsa.pub,私钥文件为 id_rsa。
将公钥上传至服务器的用户家目录下的 .ssh/authorized_keys 文件中,可通过 ssh-copy-id -i ~/.ssh/id_rsa.pub user@serverip 命令自动完成上传,或手动将公钥内容追加至服务器端 ~/.ssh/authorized_keys 文件中,确保服务器端 .ssh 目录权限为 700,authorized_keys 文件权限为 600,否则 SSH 服务可能拒绝加载密钥。
防火墙与 SELinux 的配置
CentOS 6.4 默认使用 iptables 防火墙,需开放 SSH 服务端口,若修改了默认端口(如 2222),执行以下命令:
iptables -A INPUT -p tcp --dport 2222 -j ACCEPT service iptables save service iptables restart
若使用默认端口 22,则确保 iptables -L 规则中包含允许 22 端口的条目。
SELinux 可能对 SSH 服务产生影响,若遇到连接问题,可临时关闭 SELinux 进行测试(setenforce 0),或通过 semanage port -l | grep ssh 查看当前 SSH 端口策略,使用 semanage port -a -t ssh_port_t -p tcp 2222 添加自定义端口策略。
SSH 连接的常见问题排查
- 连接超时或被拒绝:检查 SSH 服务是否启动(
service sshd status),防火墙和 SELinux 设置,以及服务器网络连通性。 - 密钥认证失败:确认服务器端
authorized_keys文件权限正确,且公钥内容格式无误(避免包含多余空格或换行符)。 - 提示 "Permission denied":检查用户是否在
AllowUsers列表中,或是否禁用了密码认证但未配置密钥。
FAQs
Q1: 如何在 CentOS 6.4 中禁用 SSH 的密码登录,仅允许密钥认证?
A1: 编辑 /etc/ssh/sshd_config 文件,确保以下配置生效:PasswordAuthentication no 和 PubkeyAuthentication yes,保存后重启 SSH 服务(service sshd restart),确保服务器端已正确配置用户的公钥,并设置好 .ssh 目录和 authorized_keys 文件的权限。
Q2: 修改 SSH 端口后,如何确保防火墙和 SELinux 不影响连接?
A2: 防火墙方面,使用 iptables -A INPUT -p tcp --dport 新端口号 -j ACCEPT 开放端口,并保存规则(service iptables save),SELinux 方面,若使用自定义端口,需通过 semanage port -a -t ssh_port_t -p tcp 新端口号 添加端口策略,或临时关闭 SELinux(setenforce 0)进行测试,重启服务后即可通过新端口连接。