跳转到内容

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 sshd

2.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 -y

3. 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

常用配置项

配置项说明默认值
PortSSH端口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 2

3.3 客户端配置

客户端配置用于设置SSH客户端的参数。

配置文件示例

bash
# 编辑SSH客户端配置文件
sudo vim /etc/ssh/ssh_config

常用配置项

配置项说明默认值
PortSSH端口22
ConnectTimeout连接超时时间0
ServerAliveInterval服务器存活间隔0
ServerAliveCountMax服务器存活最大次数3

配置示例

bash
# SSH端口
Port 2222

# 连接超时时间(秒)
ConnectTimeout 30

# 服务器存活间隔(秒)
ServerAliveInterval 60

# 服务器存活最大次数
ServerAliveCountMax 3

4. 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_rsa

4.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_keys

4.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 group1

5.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 --reload

6. SSH安全最佳实践

6.1 禁止root登录

禁止root登录可以提高系统安全性。

配置示例

bash
# 编辑SSH服务器配置文件
sudo vim /etc/ssh/sshd_config

# 禁止root登录
PermitRootLogin no

# 重启SSH服务器
sudo systemctl restart sshd

6.2 禁止密码认证

禁止密码认证可以提高系统安全性。

配置示例

bash
# 编辑SSH服务器配置文件
sudo vim /etc/ssh/sshd_config

# 禁止密码认证
PasswordAuthentication no

# 重启SSH服务器
sudo systemctl restart sshd

6.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 --reload

6.4 限制认证次数

限制认证次数可以提高系统安全性。

配置示例

bash
# 编辑SSH服务器配置文件
sudo vim /etc/ssh/sshd_config

# 限制认证次数
MaxAuthTries 3

# 重启SSH服务器
sudo systemctl restart sshd

6.5 设置会话超时

设置会话超时可以提高系统安全性。

配置示例

bash
# 编辑SSH服务器配置文件
sudo vim /etc/ssh/sshd_config

# 设置会话超时
ClientAliveInterval 300
ClientAliveCountMax 2

# 重启SSH服务器
sudo systemctl restart sshd

7. 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 22

7.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端口等。

评论区

专业的Linux技术学习平台,从入门到精通的完整学习路径