主题
SSH安全配置详解
课程介绍
SSH(Secure Shell)是Linux系统最常用的远程登录工具,SSH安全配置对于系统安全至关重要。本课程将详细讲解SSH安全配置、密钥认证、访问控制、端口配置等核心功能,帮助你搭建安全的SSH环境。
1. SSH概述
1.1 什么是SSH
SSH是一种加密的网络协议,用于安全地远程登录和管理Linux系统。
SSH的特点:
| 特点 | 说明 |
|---|---|
| 加密通信 | 所有通信都经过加密 |
| 身份认证 | 支持多种认证方式 |
| 端口转发 | 支持端口转发功能 |
| 文件传输 | 支持安全文件传输 |
| 跨平台 | 支持多种操作系统 |
1.2 SSH的架构
SSH采用客户端-服务器架构。
SSH架构:
SSH Client(SSH客户端)
↓
SSH Server(SSH服务器)
↓
Linux系统(Linux系统)组件说明:
| 组件 | 说明 |
|---|---|
| SSH Client | 客户端,用于连接SSH服务器 |
| SSH Server | 服务器,用于接受SSH连接 |
| Linux系统 | Linux系统,提供系统服务 |
2. SSH安装
2.1 安装SSH服务器
安装SSH服务器的步骤。
在Ubuntu上安装SSH服务器:
bash
# 更新软件包
sudo apt update
# 安装SSH服务器
sudo apt install openssh-server -y
# 启动SSH服务器
sudo systemctl start ssh
# 设置SSH服务器开机自启
sudo systemctl enable ssh
# 查看SSH服务器状态
sudo systemctl status ssh在CentOS上安装SSH服务器:
bash
# 更新软件包
sudo yum update -y
# 安装SSH服务器
sudo yum install openssh-server -y
# 启动SSH服务器
sudo systemctl start sshd
# 设置SSH服务器开机自启
sudo systemctl enable sshd
# 查看SSH服务器状态
sudo systemctl status sshd2.2 安装SSH客户端
安装SSH客户端的步骤。
在Ubuntu上安装SSH客户端:
bash
# 更新软件包
sudo apt update
# 安装SSH客户端
sudo apt install openssh-client -y在CentOS上安装SSH客户端:
bash
# 更新软件包
sudo yum update -y
# 安装SSH客户端
sudo yum install openssh-clients -y3. SSH配置
3.1 配置文件概述
SSH使用配置文件来设置参数。
配置文件位置:
- 服务器配置:
/etc/ssh/sshd_config - 客户端配置:
/etc/ssh/ssh_config - 用户配置:
~/.ssh/config
3.2 服务器配置
服务器配置用于设置SSH服务器的参数。
配置文件示例:
bash
# 编辑SSH服务器配置文件
sudo vim /etc/ssh/sshd_config常用配置项:
| 配置项 | 说明 | 默认值 |
|---|---|---|
Port | SSH端口 | 22 |
PermitRootLogin | 是否允许root登录 | yes |
PasswordAuthentication | 是否允许密码认证 | yes |
PubkeyAuthentication | 是否允许密钥认证 | yes |
MaxAuthTries | 最大认证次数 | 6 |
ClientAliveInterval | 客户端存活间隔 | 0 |
ClientAliveCountMax | 客户端存活最大次数 | 3 |
配置示例:
bash
# SSH端口
Port 2222
# 禁止root登录
PermitRootLogin no
# 禁止密码认证
PasswordAuthentication no
# 允许密钥认证
PubkeyAuthentication yes
# 最大认证次数
MaxAuthTries 3
# 客户端存活间隔(秒)
ClientAliveInterval 300
# 客户端存活最大次数
ClientAliveCountMax 23.3 客户端配置
客户端配置用于设置SSH客户端的参数。
配置文件示例:
bash
# 编辑SSH客户端配置文件
sudo vim /etc/ssh/ssh_config常用配置项:
| 配置项 | 说明 | 默认值 |
|---|---|---|
Port | SSH端口 | 22 |
ConnectTimeout | 连接超时时间 | 0 |
ServerAliveInterval | 服务器存活间隔 | 0 |
ServerAliveCountMax | 服务器存活最大次数 | 3 |
配置示例:
bash
# SSH端口
Port 2222
# 连接超时时间(秒)
ConnectTimeout 30
# 服务器存活间隔(秒)
ServerAliveInterval 60
# 服务器存活最大次数
ServerAliveCountMax 34. SSH密钥认证
4.1 生成SSH密钥
生成SSH密钥的步骤。
步骤1:生成SSH密钥
bash
# 生成RSA密钥
ssh-keygen -t rsa -b 4096
# 生成ED25519密钥
ssh-keygen -t ed25519步骤2:设置密钥密码
bash
# 设置密钥密码
Enter passphrase (empty for no passphrase):步骤3:查看密钥
bash
# 查看公钥
cat ~/.ssh/id_rsa.pub
# 查看私钥
cat ~/.ssh/id_rsa4.2 复制公钥到服务器
复制公钥到服务器的步骤。
方法1:使用ssh-copy-id
bash
# 复制公钥到服务器
ssh-copy-id user@server
# 指定端口复制公钥到服务器
ssh-copy-id -p 2222 user@server方法2:手动复制
bash
# 查看公钥
cat ~/.ssh/id_rsa.pub
# 在服务器上创建authorized_keys文件
mkdir -p ~/.ssh
chmod 700 ~/.ssh
vim ~/.ssh/authorized_keys
# 将公钥粘贴到authorized_keys文件中
chmod 600 ~/.ssh/authorized_keys4.3 使用密钥登录
使用密钥登录服务器的步骤。
步骤1:登录服务器
bash
# 使用密钥登录服务器
ssh user@server
# 指定密钥登录服务器
ssh -i ~/.ssh/id_rsa user@server
# 指定端口登录服务器
ssh -p 2222 user@server步骤2:输入密钥密码
bash
# 输入密钥密码
Enter passphrase for key '/home/user/.ssh/id_rsa':5. SSH访问控制
5.1 用户访问控制
用户访问控制用于限制用户访问。
配置示例:
bash
# 编辑SSH服务器配置文件
sudo vim /etc/ssh/sshd_config允许特定用户登录:
bash
# 允许特定用户登录
AllowUsers user1 user2 user3禁止特定用户登录:
bash
# 禁止特定用户登录
DenyUsers root user1 user2允许特定组登录:
bash
# 允许特定组登录
AllowGroups group1 group2禁止特定组登录:
bash
# 禁止特定组登录
DenyGroups root group15.2 IP访问控制
IP访问控制用于限制IP访问。
方法1:使用TCP Wrappers
bash
# 编辑hosts.allow文件
sudo vim /etc/hosts.allow允许特定IP访问:
bash
# 允许特定IP访问
sshd: 192.168.1.0/24编辑hosts.deny文件:
bash
# 编辑hosts.deny文件
sudo vim /etc/hosts.deny禁止所有IP访问:
bash
# 禁止所有IP访问
sshd: ALL方法2:使用防火墙
bash
# 允许特定IP访问SSH
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" service name="ssh" accept'
# 重载防火墙
sudo firewall-cmd --reload6. SSH安全最佳实践
6.1 禁止root登录
禁止root登录可以提高系统安全性。
配置示例:
bash
# 编辑SSH服务器配置文件
sudo vim /etc/ssh/sshd_config
# 禁止root登录
PermitRootLogin no
# 重启SSH服务器
sudo systemctl restart sshd6.2 禁止密码认证
禁止密码认证可以提高系统安全性。
配置示例:
bash
# 编辑SSH服务器配置文件
sudo vim /etc/ssh/sshd_config
# 禁止密码认证
PasswordAuthentication no
# 重启SSH服务器
sudo systemctl restart sshd6.3 修改SSH端口
修改SSH端口可以提高系统安全性。
配置示例:
bash
# 编辑SSH服务器配置文件
sudo vim /etc/ssh/sshd_config
# 修改SSH端口
Port 2222
# 重启SSH服务器
sudo systemctl restart sshd
# 配置防火墙
sudo firewall-cmd --permanent --add-port=2222/tcp
sudo firewall-cmd --reload6.4 限制认证次数
限制认证次数可以提高系统安全性。
配置示例:
bash
# 编辑SSH服务器配置文件
sudo vim /etc/ssh/sshd_config
# 限制认证次数
MaxAuthTries 3
# 重启SSH服务器
sudo systemctl restart sshd6.5 设置会话超时
设置会话超时可以提高系统安全性。
配置示例:
bash
# 编辑SSH服务器配置文件
sudo vim /etc/ssh/sshd_config
# 设置会话超时
ClientAliveInterval 300
ClientAliveCountMax 2
# 重启SSH服务器
sudo systemctl restart sshd7. SSH故障排查
7.1 连接失败
连接失败的原因和解决方法。
故障现象:
ssh: connect to host server port 22: Connection refused排查步骤:
步骤1:检查SSH服务器是否运行
bash
# 检查SSH服务器状态
sudo systemctl status sshd步骤2:检查SSH端口是否开放
bash
# 检查SSH端口
sudo ss -tlnp | grep sshd
# 检查防火墙
sudo firewall-cmd --list-all步骤3:检查网络连接
bash
# 检查网络连接
ping server
# 检查端口连接
telnet server 227.2 认证失败
认证失败的原因和解决方法。
故障现象:
Permission denied (publickey,password).排查步骤:
步骤1:检查用户名和密码
bash
# 检查用户名
whoami
# 检查密码
# 重新输入密码步骤2:检查SSH密钥
bash
# 检查SSH密钥
ls -la ~/.ssh/
# 检查authorized_keys文件
cat ~/.ssh/authorized_keys步骤3:检查SSH配置
bash
# 检查SSH服务器配置
sudo cat /etc/ssh/sshd_config | grep -E "PasswordAuthentication|PubkeyAuthentication"课程总结
这节课我们学习了SSH安全配置详解。
核心内容:
- SSH概述
- SSH安装
- SSH配置
- SSH密钥认证
- SSH访问控制
- SSH安全最佳实践
- SSH故障排查
重要命令:
sudo apt install openssh-server:安装SSH服务器sudo systemctl start sshd:启动SSH服务器ssh-keygen -t rsa -b 4096:生成SSH密钥ssh-copy-id user@server:复制公钥到服务器ssh user@server:登录服务器
SSH是Linux系统最常用的远程登录工具,掌握这些知识后,我们将在后续课程中学习防火墙高级配置、SELinux配置和系统加固等内容。
课后练习
练习1(基础)
在Ubuntu上安装SSH服务器,并完成初始化配置。
练习2(进阶)
生成SSH密钥,并使用密钥登录服务器。
练习3(拓展)
配置SSH安全最佳实践,包括禁止root登录、禁止密码认证、修改SSH端口等。