SSH服务器端的核心配置文件是/etc/ssh/sshd_config,同时依赖主机密钥文件和用户授权密钥文件,正确理解这些文件是保障远程管理安全的基础。
SSH服务器端配置文件有哪些?完整清单与位置说明
SSH服务端配置文件主要存放在/etc/ssh/目录下,不同发行版可能略有差异,但核心文件一致,下表列出最关键的配置文件及其作用:
| 文件路径 | 类型 | 作用 |
|---|---|---|
| /etc/ssh/sshd_config | 服务端主配置 | 控制端口、认证方式、登录限制等 |
| /etc/ssh/ssh_host_rsa_key | 主机密钥(RSA) | 服务器身份验证,需严格保密 |
| /etc/ssh/ssh_host_ecdsa_key | 主机密钥(ECDSA) | 同上 |
| /etc/ssh/ssh_host_ed25519_key | 主机密钥(Ed25519) | 同上 |
| ~/.ssh/authorized_keys | 用户授权密钥 | 存放客户端公钥,实现免密登录 |
| /etc/ssh/ssh_config | 客户端配置文件 | 影响该服务器作为客户端时的行为 |
| /etc/ssh/sshd_config.d/ | 配置片段目录 | 可包含多个配置文件,避免直接修改主文件 |
- 主机密钥文件:权限必须为600,属主root,若权限错误,sshd会拒绝启动,行业共识认为,主机密钥泄漏可能导致中间人攻击,因此需定期调整密钥算法并备份。
- authorized_keys:每个用户家目录下的
.ssh/authorized_keys,权限为600,目录权限700,SSH服务在验证用户时读取该文件。 - sshd_config.d:现代Linux发行版(如Ubuntu 20.04+、CentOS 8+)支持此目录,可通过
Include /etc/ssh/sshd_config.d/.conf包含其他配置,便于管理。
实操:查看所有文件列表:
ls -l /etc/ssh/
重点解析sshd_config:常用配置项与修改方法
sshd_config是SSH服务端最核心的配置文件,每行一个配置,格式为指令 参数,修改后需执行sshd -t检查语法,然后重启服务。
常用配置项
- Port:指定监听端口,默认22,建议修改为高位端口(如2222),显著减少自动扫描攻击。
- ListenAddress:绑定特定IP地址,如
0.0.0表示所有接口。 - PasswordAuthentication:是否允许密码认证,生产环境建议设为
no,仅依赖密钥认证。 - PubkeyAuthentication:开启公钥认证,默认yes。
- PermitRootLogin:控制root登录,推荐
prohibit-password,禁止密码但允许密钥登录。 - AllowUsers / DenyUsers:白名单/黑名单用户,有效限制登录账号。
- MaxAuthTries:最大认证尝试次数,默认6,可设为3。
- ClientAliveInterval 和 ClientAliveCountMax:空闲超时检测,避免僵尸连接。
- Subsystem sftp:内置SFTP子系统,用于文件传输。
配置示例
Port 2222
ListenAddress 0.0.0.0
PasswordAuthentication no
PubkeyAuthentication yes
PermitRootLogin prohibit-password
AllowUsers admin devops
MaxAuthTries 3
ClientAliveInterval 300
ClientAliveCountMax 2
修改方法:使用vim /etc/ssh/sshd_config编辑,保存后执行sshd -t确认无错误,然后systemctl restart sshd。
ssh_config和sshd_config有什么区别?对比详解
很多新手会对这两个文件混淆,它们虽然名字相似,但作用完全不同。
| 对比项 | ssh_config(客户端配置) | sshd_config(服务端配置) |
|---|---|---|
| 作用对象 | SSH客户端(连接其他服务器) | SSH服务端(接受连接) |
| 位置 | /etc/ssh/ssh_config | /etc/ssh/sshd_config |
| 主要指令 | Host, Port(默认连接端口), ForwardAgent, Compression | Port, ListenAddress, PasswordAuthentication, PermitRootLogin |
| 修改后生效 | 立即对后续新连接生效 | 需要重启sshd服务 |
| 优先级 | 用户级~/.ssh/config覆盖全局配置 | 没有用户级覆盖,但sshd_config.d可拆分 |
- ssh_config:主要控制客户端的行为,如默认使用哪个密钥、是否开启X11转发等,如果服务器也作为客户端连接其他机器,修改此文件会影响对外连接。
- sshd_config:控制服务端行为,如允许哪些用户登录、使用哪种认证方式。
修改ssh配置文件后需要重启吗?正确操作步骤
修改sshd_config后必须重启sshd服务,否则新配置不生效。 而修改ssh_config后无需重启,但需开启新连接才会生效。
重启SSH服务的命令
- 使用systemd:
sudo systemctl restart sshd(或ssh.service) - 使用SysV init:
sudo service sshd restart
安全操作流程
- 编辑配置文件前先备份:
cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak - 编辑文件:
vim /etc/ssh/sshd_config - 检查语法:
sshd -t,若输出无错误,则继续;若有错误,根据提示修正。 - 重启服务:
systemctl restart sshd - 验证新配置是否生效:
sshd -T | grep -E "port|passwordauthentication"查看当前参数。
注意:如果修改了端口,需要确保防火墙放行新端口,且SELinux/AppArmor策略已更新,建议保留一个旧端口会话,测试新端口可用后再关闭旧端口,避免锁定。
最安全的SSH配置参数实战
安全配置的核心是禁用密码、密钥登录、限制用户、修改端口、启用日志,以下是经过验证的安全配置模板:
Port 2222
PasswordAuthentication no
PubkeyAuthentication yes
PermitRootLogin no
AllowUsers devops
MaxAuthTries 3
ClientAliveInterval 300
ClientAliveCountMax 2
LogLevel VERBOSE
- 禁用密码登录(PasswordAuthentication no)后,仅允许密钥认证,大大降低暴力破解风险。
- 禁止root直接登录(PermitRootLogin no),日常使用普通用户,需要提权时使用sudo。
- 使用AllowUsers白名单,只允许特定用户登录。
- 降低MaxAuthTries减少攻击尝试次数。
- 开启详细日志(LogLevel VERBOSE),便于审计。
建议定期更新主机密钥算法,使用更强的Ed25519算法:ssh-keygen -t ed25519 -f /etc/ssh/ssh_host_ed25519_key -N "",并移除旧算法。
常见问题与排查Q&A
SSH配置文件在哪?如何快速查看当前配置?
服务端配置文件位于/etc/ssh/sshd_config,查看有效配置(排除注释和空行):grep -E "^[^#]" /etc/ssh/sshd_config | grep -v "^$",也可使用sshd -T输出当前所有生效配置,包含默认值。
修改端口后无法连接,可能的原因是什么?
原因主要有三个:防火墙未放行新端口、SELinux限制、sshd未重启,检查防火墙规则:firewall-cmd --list-all(CentOS)或iptables -L -n,如果使用SELinux,需添加端口:semanage port -a -t ssh_port_t -p tcp 2222,配置无误后执行sshd -t并重启服务。
authorized_keys文件权限设置错误如何处理?
SSH要求authorized_keys文件权限为600,目录权限为700,如果权限过大,SSH会忽略该文件,导致密钥认证失败,修复命令:chmod 600 ~/.ssh/authorized_keys; chmod 700 ~/.ssh,同时确认属主是当前用户。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/520223.html


