在Linux系统中配置SSH服务器是实现远程安全管理的核心操作,通过合理的配置可以提升远程连接的安全性,同时适配不同的使用需求。SSH服务默认使用22端口,支持密码和密钥两种认证方式,配置过程主要涉及服务安装、配置文件修改和服务重启三个核心环节。

安装SSH服务
大部分Linux发行版默认没有安装SSH服务器,需要先安装openssh-server包。不同发行版的包管理命令有所区别,以下是常见发行版的安装方式:
- Debian、Ubuntu系列使用apt包管理器
- CentOS、RHEL系列使用yum或dnf包管理器
- Arch Linux使用pacman包管理器
以Ubuntu系统为例,安装命令如下:
# 更新软件包索引 sudo apt update # 安装openssh-server sudo apt install openssh-server -y
SSH核心配置文件说明
SSH服务器的主配置文件路径为/etc/ssh/sshd_config,所有核心配置都在这个文件中修改。修改配置文件前建议先备份原文件,避免配置错误后无法恢复:
# 备份原配置文件 sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
配置文件中常见的核心参数含义如下:
| 参数名 | 默认值 | 参数说明 |
|---|---|---|
| Port | 22 | SSH服务监听的端口,可修改为非默认端口提升安全性 |
| PermitRootLogin | yes | 是否允许root用户直接登录,建议设置为no禁止直接root登录 |
| PasswordAuthentication | yes | 是否允许密码认证,开启密钥认证后可设置为no |
| PubkeyAuthentication | yes | 是否允许公钥认证,推荐使用此方式替代密码认证 |
| AuthorizedKeysFile | .ssh/authorized_keys | 存放客户端公钥的文件路径 |
修改配置提升安全性
修改默认端口
将默认22端口修改为其他未被占用的端口,可以减少自动化脚本的暴力破解尝试。编辑配置文件找到Port行,去掉注释并修改为自定义端口,例如修改为2222:
# 使用vim编辑配置文件 sudo vim /etc/ssh/sshd_config # 找到Port 22行,修改为 Port 2222
禁止root用户直接登录
直接允许root用户登录存在较高安全风险,建议禁止root直接登录,使用普通用户登录后切换root权限。修改配置文件中PermitRootLogin参数:
# 找到PermitRootLogin行,修改为 PermitRootLogin no
配置公钥认证
公钥认证比密码认证更安全,避免密码被暴力破解。首先在客户端生成密钥对:
# 客户端执行,生成RSA密钥对,一路回车使用默认配置即可 ssh-keygen -t rsa
生成后会在客户端的~/.ssh/目录下生成id_rsa(私钥)和id_rsa.pub(公钥)两个文件。然后将公钥上传到服务器的对应用户目录下:
# 客户端执行,将公钥上传到服务器,替换为实际服务器地址和端口 ssh-copy-id -i ~/.ssh/id_rsa.pub -p 2222 用户名@服务器IP
上传完成后,在服务器上确认~/.ssh/authorized_keys文件存在且权限正确:
# 服务器上执行,设置.ssh目录权限 chmod 700 ~/.ssh # 设置公钥文件权限 chmod 600 ~/.ssh/authorized_keys
然后修改SSH配置文件开启公钥认证,关闭密码认证:
# 编辑配置文件,修改以下参数 PubkeyAuthentication yes PasswordAuthentication no
重启SSH服务生效配置
修改完配置文件后,需要重启SSH服务让配置生效,不同发行版的服务重启命令如下:
# Ubuntu/Debian系统 sudo systemctl restart sshd # 或者 sudo service ssh restart # CentOS/RHEL系统 sudo systemctl restart sshd
重启后可以设置SSH服务开机自启动,避免服务器重启后服务未运行:
sudo systemctl enable sshd
验证SSH服务配置
配置完成后,使用客户端尝试连接服务器验证配置是否生效:
# 使用修改后的端口和用户名连接,替换为实际信息 ssh -p 2222 用户名@服务器IP
如果配置了公钥认证,连接时不需要输入密码即可登录。如果连接失败,可以查看SSH服务的日志排查问题,日志文件路径通常为/var/log/auth.log(Debian/Ubuntu)或/var/log/secure(CentOS/RHEL):
# Ubuntu系统查看SSH日志 sudo tail -f /var/log/auth.log # CentOS系统查看SSH日志 sudo tail -f /var/log/secure
注意:如果修改了SSH端口,后续连接时必须指定对应的端口号,否则会连接失败。同时防火墙需要放行对应的SSH端口,避免端口被拦截导致无法连接。
SSHLinuxssh_configsshd公钥认证修改时间:2026-07-20 10:57:28