🎬 HoRain云小助手个人主页

 🔥 个人专栏: 《Linux 系列教程》《c语言教程

⛺️生活的理想,就是为了理想的生活!


⛳️ 推荐

前些天发现了一个超棒的服务器购买网站,性价比超高,大内存超划算!忍不住分享一下给大家。点击跳转到网站。

专栏介绍

专栏名称

专栏介绍

《C语言》

本专栏主要撰写C干货内容和编程技巧,让大家从底层了解C,把更多的知识由抽象到简单通俗易懂。

《网络协议》

本专栏主要是注重从底层来给大家一步步剖析网络协议的奥秘,一起解密网络协议在运行中协议的基本运行机制!

《docker容器精解篇》

全面深入解析 docker 容器,从基础到进阶,涵盖原理、操作、实践案例,助您精通 docker。

《linux系列》

本专栏主要撰写Linux干货内容,从基础到进阶,知识由抽象到简单通俗易懂,帮你从新手小白到扫地僧。

《python 系列》

本专栏着重撰写Python相关的干货内容与编程技巧,助力大家从底层去认识Python,将更多复杂的知识由抽象转化为简单易懂的内容。

《试题库》

本专栏主要是发布一些考试和练习题库(涵盖软考、HCIE、HRCE、CCNA等)

目录

⛳️ 推荐

专栏介绍

📦 基础安装与启动

1. 检查与安装OpenSSH

2. 启动服务并设置开机自启

⚙️ 核心配置文件详解

基本配置修改

关键配置参数说明

安全配置示例

🔐 密钥认证配置(推荐)

1. 客户端生成密钥对

2. 上传公钥到服务器

3. 测试密钥登录

🛡️ 防火墙与SELinux配置

1. 防火墙配置(firewalld)

2. SELinux配置(如果使用自定义端口)

🚀 高级:编译安装最新版OpenSSH

1. 准备工作

2. 升级OpenSSL(可选但推荐)

3. 编译安装OpenSSH

4. 恢复配置并重启服务

🔧 故障排查与常见问题

1. 连接被拒绝

2. 密钥认证失败

3. 中文乱码问题

4. 会话频繁断开

📊 安全加固检查清单

💎 最佳实践总结


img

在CentOS 7上安装和配置OpenSSH是远程管理服务器的基本操作。下面我将从基础安装到安全加固,为您提供完整的实战指南。

📦 基础安装与启动

1. 检查与安装OpenSSH

# 1. 检查是否已安装OpenSSH
rpm -qa | grep openssh

# 2. 如果未安装,安装OpenSSH服务端和客户端
sudo yum install -y openssh-server openssh-clients

# 3. 验证安装
rpm -qa | grep openssh
# 正常应显示:openssh, openssh-server, openssh-clients

2. 启动服务并设置开机自启

# 启动SSH服务
sudo systemctl start sshd.service

# 设置开机自动启动
sudo systemctl enable sshd.service

# 检查服务状态
sudo systemctl status sshd.service

# 验证22端口是否监听
ss -lntu | grep :22
# 或使用
netstat -tlnp | grep sshd

⚙️ 核心配置文件详解

主配置文件:/etc/ssh/sshd_config

基本配置修改

# 备份原始配置文件(重要!)
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak

# 编辑配置文件
sudo vi /etc/ssh/sshd_config

关键配置参数说明

参数

说明

推荐值

安全等级

Port

SSH服务端口

22(默认)或自定义端口(如2222)

🔴 必须修改

Protocol

SSH协议版本

2

🟢 必须为2

PermitRootLogin

是否允许root登录

no(禁止)或prohibit-password(仅密钥)

🔴 必须限制

PasswordAuthentication

密码认证

no(推荐禁用)

🟡 建议禁用

PubkeyAuthentication

密钥认证

yes

🟢 必须启用

UseDNS

DNS反向解析

no(提升连接速度)

🟡 建议禁用

MaxAuthTries

最大认证尝试次数

3-6

🟡 建议限制

LoginGraceTime

登录超时时间

30s-2m

🟡 建议设置

安全配置示例

# /etc/ssh/sshd_config 安全配置片段

# 修改默认端口(避免常规扫描)
Port 2222

# 强制使用SSHv2协议
Protocol 2

# 禁止root用户直接登录
PermitRootLogin no

# 禁用密码认证(使用密钥后)
PasswordAuthentication no

# 启用密钥认证
PubkeyAuthentication yes

# 禁用DNS反向查询(加速连接)
UseDNS no

# 限制登录超时时间
LoginGraceTime 30s

# 最大认证尝试次数
MaxAuthTries 3

# 限制用户登录(白名单)
AllowUsers admin user1 user2

# 或限制用户组
AllowGroups sshusers

# 会话保活设置(防止超时断开)
ClientAliveInterval 300
ClientAliveCountMax 3

🔐 密钥认证配置(推荐)

1. 客户端生成密钥对

# 生成RSA密钥(4096位,更安全)
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

# 或生成ECDSA密钥(更高效)
ssh-keygen -t ecdsa -b 521 -C "your_email@example.com"

# 生成Ed25519密钥(最推荐)
ssh-keygen -t ed25519 -C "your_email@example.com"

2. 上传公钥到服务器

# 方法1:使用ssh-copy-id(最简单)
ssh-copy-id -i ~/.ssh/id_ed25519.pub username@server_ip -p 2222

# 方法2:手动复制
# 在服务器上创建.ssh目录并设置权限
ssh username@server_ip -p 2222 "mkdir -p ~/.ssh && chmod 700 ~/.ssh"

# 将公钥内容追加到authorized_keys
cat ~/.ssh/id_ed25519.pub | ssh username@server_ip -p 2222 "cat >> ~/.ssh/authorized_keys"

# 设置正确的文件权限
ssh username@server_ip -p 2222 "chmod 600 ~/.ssh/authorized_keys"

3. 测试密钥登录

# 测试连接(使用指定端口和密钥)
ssh -i ~/.ssh/id_ed25519 -p 2222 username@server_ip

# 如果配置正确,应该无需密码直接登录

🛡️ 防火墙与SELinux配置

1. 防火墙配置(firewalld)

# 如果使用默认22端口
sudo firewall-cmd --add-service=ssh --permanent
sudo firewall-cmd --reload

# 如果使用自定义端口(如2222)
sudo firewall-cmd --add-port=2222/tcp --permanent
sudo firewall-cmd --reload

# 查看已开放的端口
sudo firewall-cmd --list-ports
sudo firewall-cmd --list-services

2. SELinux配置(如果使用自定义端口)

# 安装SELinux管理工具
sudo yum install -y policycoreutils-python

# 添加自定义端口到SELinux策略
sudo semanage port -a -t ssh_port_t -p tcp 2222

# 验证配置
sudo semanage port -l | grep ssh

# 如果遇到SELinux阻止,可以查看日志
sudo ausearch -m avc -ts recent | grep sshd

🚀 高级:编译安装最新版OpenSSH

如果CentOS 7自带的OpenSSH版本(通常为7.4)存在安全漏洞,可以升级到最新版本。

1. 准备工作

# 备份重要文件
sudo cp /etc/ssh/sshd_config /tmp/sshd_config.bak
sudo cp /etc/pam.d/sshd /tmp/sshd.pam.bak

# 安装编译依赖
sudo yum groupinstall "Development Tools" -y
sudo yum install -y zlib-devel openssl-devel pam-devel wget gcc make perl

2. 升级OpenSSL(可选但推荐)

# 下载最新OpenSSL
wget https://www.openssl.org/source/openssl-1.1.1w.tar.gz
tar -zxvf openssl-1.1.1w.tar.gz
cd openssl-1.1.1w

# 编译安装
./config --prefix=/usr/local/openssl --openssldir=/usr/local/openssl -Wl,-rpath,/usr/local/openssl/lib shared
make && sudo make install

# 创建软链接
sudo ln -sf /usr/local/openssl/bin/openssl /usr/bin/openssl
sudo ln -sf /usr/local/openssl/include/openssl /usr/include/openssl

# 更新库路径
echo "/usr/local/openssl/lib" | sudo tee /etc/ld.so.conf.d/openssl.conf
sudo ldconfig

# 验证版本
openssl version

3. 编译安装OpenSSH

# 下载最新OpenSSH(以9.6p1为例)
wget https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-9.6p1.tar.gz
tar -zxvf openssh-9.6p1.tar.gz
cd openssh-9.6p1

# 配置编译选项
./configure --prefix=/usr --sysconfdir=/etc/ssh --with-pam --with-zlib --with-ssl-dir=/usr/local/openssl

# 编译并安装
make
sudo make install

# 验证版本
ssh -V

4. 恢复配置并重启服务

# 恢复配置文件
sudo cp /tmp/sshd_config.bak /etc/ssh/sshd_config

# 重启服务
sudo systemctl restart sshd

# 检查服务状态
sudo systemctl status sshd

🔧 故障排查与常见问题

1. 连接被拒绝

# 检查服务是否运行
sudo systemctl status sshd

# 检查端口监听
sudo ss -lntp | grep ssh

# 检查防火墙
sudo firewall-cmd --list-all

# 检查SELinux
sudo getenforce
sudo ausearch -m avc -ts recent | grep sshd

2. 密钥认证失败

# 检查服务器端权限(必须严格)
ls -la ~/.ssh/
# authorized_keys 权限应为600
# .ssh目录权限应为700

# 检查sshd配置
sudo grep -E "PubkeyAuthentication|AuthorizedKeysFile" /etc/ssh/sshd_config

# 查看sshd日志
sudo journalctl -u sshd -f
sudo tail -f /var/log/secure

3. 中文乱码问题

# 修改服务器语言环境
sudo localectl set-locale LANG=zh_CN.UTF-8

# 或修改配置文件
echo 'LANG="zh_CN.UTF-8"' | sudo tee /etc/locale.conf

# 重新登录生效

4. 会话频繁断开

# 在客户端配置(~/.ssh/config)
Host *
    ServerAliveInterval 60
    ServerAliveCountMax 10

# 或在服务器配置(/etc/ssh/sshd_config)
ClientAliveInterval 60
ClientAliveCountMax 10

📊 安全加固检查清单

检查项

命令/方法

预期结果

端口是否修改

grep ^Port /etc/ssh/sshd_config

非22端口

Root登录是否禁用

grep ^PermitRootLogin /etc/ssh/sshd_config

noprohibit-password

密码认证是否禁用

grep ^PasswordAuthentication /etc/ssh/sshd_config

no

协议版本

grep ^Protocol /etc/ssh/sshd_config

2

密钥文件权限

ls -la ~/.ssh/authorized_keys

-rw-------(600)

SSH服务版本

ssh -V

无已知高危漏洞版本

防火墙状态

sudo firewall-cmd --list-all

SSH端口已开放

失败登录日志

sudo lastb

无异常频繁尝试

💎 最佳实践总结

  1. 最小权限原则:创建普通用户,使用sudo提权,禁用root直接登录。

  2. 密钥优先:完全禁用密码认证,使用ED25519或RSA 4096位密钥。

  3. 端口隐藏:使用非标准端口(10000-65535),减少自动化扫描攻击。

  4. 定期更新:关注OpenSSH安全公告,及时升级到安全版本。

  5. 日志监控:定期检查/var/log/secure,设置失败登录告警。

  6. 网络隔离:通过防火墙限制SSH访问源IP,仅允许可信网络。

  7. 备份配置:修改前备份sshd_config,测试通过后再应用到生产环境。

通过以上步骤,您可以在CentOS 7上建立安全、稳定的SSH远程管理环境。对于生产环境,建议先在测试服务器验证所有配置,确保无误后再部署。

❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄

💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍

🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐