后端

Linux SSH配置修改实战:端口、权限与安全设置全指南

TRAE AI 编程助手

SSH 作为 Linux 系统远程管理的标准协议,其安全配置直接关系到服务器的生死存亡。本文将手把手教你从基础配置到高级加固,打造铜墙铁壁般的 SSH 防护体系。

SSH 基础概念:不只是远程登录那么简单

SSH(Secure Shell)协议采用客户端-服务器架构,通过加密通道在网络中传输数据。相比传统的 Telnet,SSH 提供了身份验证、数据加密和完整性保护三重安全保障。

# 查看当前 SSH 服务状态
systemctl status sshd
# 检查 SSH 版本信息
ssh -V
# 测试本地 SSH 连接
ssh localhost

现代 Linux 发行版默认使用 OpenSSH 实现,服务端进程为 sshd,客户端命令为 ssh。理解这个基础架构,是后续配置优化的前提条件。

SSH 配置文件深度解析:/etc/ssh/sshd_config

主配置文件 /etc/ssh/sshd_config 控制着 SSH 服务的所有行为。让我们逐段解读关键配置项:

# 端口配置(默认22,建议修改)
Port 22
# 监听地址(默认所有接口)
ListenAddress 0.0.0.0
# 协议版本(推荐使用v2)
Protocol 2
 
# 密钥文件路径
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key
HostKey /etc/ssh/ssh_host_ed25519_key
 
# 登录超时设置
LoginGraceTime 2m
MaxAuthTries 6
MaxSessions 10

配置修改后必须重启服务生效:

# 检查配置文件语法
sshd -t
# 重启 SSH 服务
systemctl restart sshd
# 确保服务开机自启
systemctl enable sshd

端口修改实战:告别默认 22 端口

将 SSH 端口从默认的 22 修改为自定义端口,能有效减少 90% 以上的暴力破解攻击。

步骤 1:选择合适的高端口号

# 查看当前端口使用情况
netstat -tulnp | grep ssh
# 选择 1024-65535 之间的未使用端口
ss -tulnp | grep 2222

步骤 2:修改配置文件

# 备份原始配置
cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
# 编辑配置文件
vim /etc/ssh/sshd_config
 
# 修改或添加以下行
Port 2222
# 如果开启了防火墙,需要添加新端口
firewall-cmd --permanent --add-port=2222/tcp
firewall-cmd --reload

步骤 3:SELinux 配置(如启用)

# 查看 SELinux 状态
getenforce
# 添加新端口到 SELinux
semanage port -a -t ssh_port_t -p tcp 2222
# 验证端口添加成功
semanage port -l | grep ssh

步骤 4:测试新端口连接

# 在新终端测试连接(不要关闭当前会话)
ssh -p 2222 username@your_server_ip
# 确认连接成功后,关闭旧会话

权限设置最佳实践:最小权限原则

用户权限控制

# 创建专用管理用户
useradd -m -s /bin/bash adminuser
passwd adminuser
# 添加到 sudo 组(Ubuntu/Debian)
usermod -aG sudo adminuser
# 添加到 wheel 组(CentOS/RHEL)
usermod -aG wheel adminuser

SSH 配置文件权限

# 设置正确的文件权限
chmod 600 /etc/ssh/sshd_config
chmod 700 /etc/ssh
chmod 600 /etc/ssh/*key
# 验证权限设置
ls -la /etc/ssh/

用户目录权限检查

# 用户主目录权限必须为 700 或 755
chmod 700 /home/username
# .ssh 目录权限必须为 700
chmod 700 /home/username/.ssh
# 公钥文件权限必须为 600
chmod 600 /home/username/.ssh/authorized_keys

安全加固配置:构建多层防护

禁用 root 直接登录

# 编辑 SSH 配置
vim /etc/ssh/sshd_config
 
# 修改以下配置
PermitRootLogin no
# 或者只允许密钥认证
PermitRootLogin prohibit-password

启用密钥认证并禁用密码登录

# 客户端生成密钥对
ssh-keygen -t ed25519 -C "your_email@example.com"
# 复制公钥到服务器
ssh-copy-id -i ~/.ssh/id_ed25519.pub username@server_ip
# 或者手动添加公钥
cat ~/.ssh/id_ed25519.pub | ssh username@server_ip "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"

服务端配置:

# 编辑 SSH 配置
vim /etc/ssh/sshd_config
 
# 启用密钥认证
PubkeyAuthentication yes
# 禁用密码认证
PasswordAuthentication no
# 禁用空密码登录
PermitEmptyPasswords no

配置防火墙规则

# 使用 firewalld(CentOS/RHEL)
firewall-cmd --permanent --add-rich-rule='rule service name="ssh" accept source address="your_ip/32"'
firewall-cmd --reload
 
# 使用 ufw(Ubuntu/Debian)
ufw allow from your_ip to any port 2222
ufw enable

启用双因子认证

# 安装 Google Authenticator
yum install google-authenticator  # CentOS/RHEL
apt install libpam-google-authenticator  # Ubuntu/Debian
 
# 配置用户双因子认证
google-authenticator
# 按照提示设置,保存好密钥和备用码

修改 PAM 配置:

# 编辑 PAM SSH 配置
vim /etc/pam.d/sshd
# 添加以下行
auth required pam_google_authenticator.so
 
# 编辑 SSH 配置启用挑战响应
vim /etc/ssh/sshd_config
ChallengeResponseAuthentication yes
AuthenticationMethods publickey,keyboard-interactive

常见问题排查与解决方案

连接超时问题

# 检查服务状态
systemctl status sshd
# 查看监听端口
netstat -tulnp | grep sshd
# 检查防火墙规则
iptables -L -n | grep 2222
firewall-cmd --list-all

权限拒绝问题

# 查看 SSH 日志
journalctl -u sshd -f
tail -f /var/log/secure  # CentOS/RHEL
tail -f /var/log/auth.log  # Ubuntu/Debian
 
# 常见权限问题修复
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
chown -R username:username ~/.ssh

密钥认证失败

# 检查密钥格式
ssh-keygen -l -f ~/.ssh/id_ed25519.pub
# 测试详细连接过程
ssh -vvv -p 2222 username@server_ip
# 检查 SELinux 上下文
restorecon -Rv ~/.ssh

TRAE IDE 中 SSH 远程开发配置建议

在现代开发环境中,使用 TRAE IDE 进行远程开发已成为趋势。TRAE IDE 提供了强大的远程开发功能,支持通过 SSH 直接连接远程服务器进行代码编写和调试。

TRAE IDE SSH 配置优化

# 在本地配置 SSH Config
vim ~/.ssh/config
 
# 添加服务器配置
Host myserver
    HostName your_server_ip
    Port 2222
    User adminuser
    IdentityFile ~/.ssh/id_ed25519
    IdentitiesOnly yes
    ServerAliveInterval 60
    ServerAliveCountMax 3

远程开发最佳实践

  1. 使用 TRAE IDE 的 Remote-SSH 插件:直接在 IDE 中连接远程服务器,无需手动 SSH 登录
  2. 配置端口转发:将远程服务的端口映射到本地,方便调试
  3. 利用 TRAE IDE 的终端集成:在 IDE 中直接使用远程服务器的终端,提高工作效率
  4. 设置文件同步:配置自动同步本地和远程文件,确保代码一致性
# 在 TRAE IDE 中配置端口转发
ssh -L 8080:localhost:8080 -L 3306:localhost:3306 myserver

安全开发建议

  • 定期轮换 SSH 密钥,建议每 3-6 个月更换一次
  • 使用 TRAE IDE 的代码审查功能,确保提交的代码安全性
  • 配置多因素认证,为远程开发增加额外的安全层
  • 监控 SSH 登录日志,及时发现异常访问行为

总结:构建企业级 SSH 安全体系

通过本文的系统性配置,你已经掌握了从基础设置到高级加固的完整 SSH 安全配置流程。记住,安全是一个持续的过程,需要定期审查和更新配置。

关键检查清单

  • ✅ 已修改默认 SSH 端口
  • ✅ 已禁用 root 直接登录
  • ✅ 已启用密钥认证并禁用密码登录
  • ✅ 已配置防火墙规则限制访问源
  • ✅ 已设置正确的文件和目录权限
  • ✅ 已启用双因子认证(可选)
  • ✅ 已配置 TRAE IDE 远程开发环境

定期执行安全审计,保持系统更新,你的 SSH 服务将具备企业级的安全防护能力。记住,最好的安全配置是多层次的深度防御,而不是依赖单一的安全措施。

(此内容由 AI 辅助生成,仅供参考)