在CentOS 7系统中,SSH(Secure Shell)是一种常用的远程管理协议,它允许用户通过加密连接安全地登录和管理服务器,本文将详细介绍如何在CentOS 7上启用和配置SSH服务,确保远程连接的安全性和稳定性。

安装SSH服务
默认情况下,CentOS 7可能未安装SSH服务,首先需要检查系统是否已安装OpenSSH服务器,执行命令rpm -q openssh-server,如果返回包名,则表示已安装;否则需要使用yum install openssh-server命令进行安装,安装完成后,启动SSH服务并设置开机自启,命令分别为systemctl start sshd和systemctl enable sshd。
配置SSH服务
SSH的主配置文件位于/etc/ssh/sshd_config,通过编辑该文件可以自定义SSH的行为,建议使用vi或nano编辑器打开文件,修改关键参数,如端口号(默认为22)、允许登录的用户、是否允许root登录等,修改后保存文件,并执行systemctl restart sshd使配置生效,为增强安全性,建议禁用root直接登录,设置PermitRootLogin no,并使用普通用户登录后切换至root权限。
防火墙设置
CentOS 7默认使用firewalld作为防火墙管理工具,若要通过SSH远程连接,需开放SSH端口(默认为22),执行firewall-cmd --permanent --add-service=ssh添加SSH服务规则,然后运行firewall-cmd --reload重新加载防火墙配置,若需自定义端口,需使用firewall-cmd --permanent --add-port=端口号/tcp命令,并确保配置文件中的端口号与防火墙设置一致。

密钥认证与密码认证
SSH支持密码认证和公钥认证两种方式,公钥认证更为安全,建议优先使用,生成密钥对使用ssh-keygen命令,默认会在用户目录下的.ssh文件夹中创建id_rsa(私钥)和id_rsa.pub(公钥),将公钥文件内容追加到远程服务器的~/.ssh/authorized_keys文件中,即可实现免密登录,若需禁用密码认证,可在sshd_config中设置PasswordAuthentication no,重启SSH服务后生效。
常见问题排查
若无法通过SSH连接服务器,首先检查SSH服务状态(systemctl status sshd),确认服务是否正常运行,查看防火墙和SELinux设置,确保SSH端口未被阻止,若连接超时或被拒绝,可检查服务器日志(/var/log/secure)定位问题,确保客户端使用的IP地址或域名正确,网络连接正常。
FAQs
问题1:如何更改SSH默认端口?
答:编辑/etc/ssh/sshd_config文件,找到#Port 22行,取消注释并修改为自定义端口(如Port 2222),保存后,在防火墙中开放新端口(firewall-cmd --permanent --add-port=2222/tcp),重新加载防火墙并重启SSH服务(systemctl restart sshd)。

问题2:SSH连接时出现“Permission denied (publickey,password)”错误如何解决?
答:此错误通常由认证失败引起,首先检查客户端公钥是否已正确添加到服务器的authorized_keys文件中,并确保文件权限设置正确(chmod 600 ~/.ssh/authorized_keys),确认sshd_config中PubkeyAuthentication yes已启用,若使用密码认证,检查PasswordAuthentication是否设置为yes,并确认用户密码无误。