Linux服务器SSH配置是系统管理员日常工作中至关重要的环节,它不仅关系到远程访问的便捷性,更直接影响到服务器的安全性,SSH(Secure Shell)是一种加密的网络传输协议,主要用于远程登录和管理服务器,本文将详细介绍Linux服务器SSH配置的各个方面,包括基础配置、安全加固、高级优化以及常见问题的解决方案。

SSH服务的基础配置通常通过修改/etc/ssh/sshd_config文件完成,在配置前,建议先备份原始配置文件,即执行cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak命令,打开配置文件后,以下是一些关键参数的说明:
- Port:默认SSH端口为22,出于安全考虑,建议修改为非默认端口(如2222),以降低自动化攻击的风险,修改后需确保防火墙允许新端口的访问。
- PermitRootLogin:默认值为
yes,允许root用户直接登录,为增强安全性,建议设置为no,强制管理员通过普通用户登录后使用sudo提权。 - PasswordAuthentication:默认值为
yes,允许密码认证,结合密钥认证时,可将其设置为no,禁用密码登录,仅允许密钥对认证,大幅提升安全性。 - PubkeyAuthentication:默认值为
yes,启用公钥认证,这是SSH安全的核心配置之一,需配合用户目录下的~/.ssh/authorized_keys文件使用。 - AllowUsers或DenyUsers:通过指定允许或拒绝的用户列表,限制远程登录的用户范围。
AllowUsers user1 user2仅允许user1和user2登录。
完成配置后,需重启SSH服务使配置生效,执行命令systemctl restart sshd(基于systemd的系统)或service sshd restart(CentOS 6等旧系统)。
在安全加固方面,除了上述基础配置外,还可以采取以下措施:
- 使用SSH密钥对:生成密钥对对(公钥和私钥)是SSH安全的基础,在客户端执行
ssh-keygen -t rsa -b 4096生成密钥,并将公钥(~/.ssh/id_rsa.pub追加到服务器的~/.ssh/authorized_keys文件中,设置正确的文件权限:chmod 700 ~/.ssh和chmod 600 ~/.ssh/authorized_keys。 - 禁用空密码登录:确保
PermitEmptyPasswords参数设置为no,防止使用空密码的用户登录。 - 限制登录尝试:通过
MaxAuthTries参数限制每个连接的最大认证尝试次数(如默认为6,可调整为3),并通过LoginGraceTime设置认证超时时间(如默认为120秒,可调整为30秒)。 - 使用Fail2ban工具:Fail2ban可以监控SSH日志,并在检测到多次失败登录后自动封禁恶意IP,安装后需配置
/etc/fail2ban/jail.local文件,设置[sshd]部分的maxretry和bantime参数。 - 定期更新SSH软件包:保持SSH服务版本最新,可通过
yum update openssh-server(CentOS/RHEL)或apt update && apt upgrade openssh-server(Ubuntu/Debian)更新。
对于高级优化,可根据实际需求调整以下参数:

- TCPKeepAlive:默认值为
yes,启用TCP保活机制,防止长时间连接因网络问题中断。 - ClientAliveInterval和ClientAliveCountMax:设置保活间隔时间和最大尝试次数。
ClientAliveInterval 60和ClientAliveCountMax 3表示每60秒发送一次保活包,最多尝试3次。 - UseDNS:默认值为
yes,SSH会进行DNS反向解析,可能延迟登录,建议设置为no,禁用DNS反向解析。 - MaxSessions:限制单个用户的最大并发会话数,防止资源耗尽攻击(默认为10)。
- ChrootDirectory:配置用户登录后的根目录,实现文件系统隔离(需配合
Match指令使用)。
以下是一个常见的SSH安全配置参数示例表格:
| 参数名 | 默认值 | 推荐值 | 说明 |
|---|---|---|---|
| Port | 22 | 2222 | 修改SSH端口 |
| PermitRootLogin | yes | no | 禁止root直接登录 |
| PasswordAuthentication | yes | no | 禁用密码认证 |
| PubkeyAuthentication | yes | yes | 启用公钥认证 |
| AllowUsers | 无 | user1 user2 | 限制允许登录的用户 |
| MaxAuthTries | 6 | 3 | 限制认证尝试次数 |
| UseDNS | yes | no | 禁用DNS反向解析 |
在配置过程中,可能会遇到一些常见问题,修改SSH端口后无法登录,可能是防火墙未开放新端口,需执行firewall-cmd --permanent --add-port=2222/tcp并重载防火墙;或SELinux策略限制,需执行semanage port -a -t ssh_port_t -p tcp 2222,又如,密钥认证失败,需检查公钥是否正确添加到authorized_keys文件,文件权限是否正确(600),以及服务器端sshd_config中PubkeyAuthentication是否为yes。
SSH配置的核心原则是“安全优先,兼顾便利”,通过合理配置参数、启用密钥认证、限制登录权限以及结合安全工具,可以有效提升SSH服务的安全性和稳定性,管理员需根据实际业务场景调整配置,并定期审查和优化,确保服务器远程管理的安全高效。
相关问答FAQs:
-
问:修改SSH端口后无法连接服务器,如何排查?
答:首先检查防火墙是否开放新端口,如使用firewall-cmd --list-ports查看;其次确认SELinux是否允许新端口,执行semanage port -l | grep ssh;最后检查/etc/ssh/sshd_config中Port参数是否正确设置,并重启SSH服务。 -
问:如何实现SSH密钥对的批量分发?
答:可使用ssh-copy-id命令逐个分发,或通过expect脚本自动化输入密码,对于批量管理,可使用Ansible的authorized_key模块,或编写Shell脚本结合sshpass(需安装)实现,sshpass -p 'password' ssh-copy-id -p 2222 user@host。
