第101集:SSH 服务配置

教学目标

  • 理解SSH服务的基本概念和工作原理
  • 掌握SSH服务的安装和基本配置方法
  • 学习SSH密钥认证的配置和使用
  • 了解SSH服务的安全加固措施
  • 能够独立配置和管理SSH服务

主要知识点

  • SSH服务的概念和工作原理
  • SSH服务的安装和启动
  • SSH服务的基本配置
  • SSH密钥认证配置
  • SSH服务的安全加固
  • SSH服务的故障排查

核心知识点讲解

SSH服务的概念和工作原理

SSH简介

SSH(Secure Shell)是一种网络协议,用于在不安全的网络中为网络服务提供安全的加密通信。它主要用于远程登录系统和执行命令,但也支持其他功能,如文件传输和端口转发。

SSH工作原理

  1. 建立连接:客户端向服务器发起连接请求
  2. 密钥交换:客户端和服务器交换密钥,建立加密通道
  3. 身份验证:客户端向服务器证明自己的身份
  4. 会话建立:身份验证成功后,建立加密会话
  5. 数据传输:通过加密通道传输数据

SSH协议版本

  • SSH-1:早期版本,存在安全漏洞,已不推荐使用
  • SSH-2:当前主流版本,提供更强的安全性

SSH服务的安装和启动

在不同发行版上安装SSH服务

  • Ubuntu/Debianapt install openssh-server
  • CentOS/RHELyum install openssh-serverdnf install openssh-server
  • Arch Linuxpacman -S openssh

启动和管理SSH服务

  • systemd系统

    • 启动:systemctl start sshd
    • 停止:systemctl stop sshd
    • 重启:systemctl restart sshd
    • 启用自启:systemctl enable sshd
    • 查看状态:systemctl status sshd
  • SysVinit系统

    • 启动:service ssh start
    • 停止:service ssh stop
    • 重启:service ssh restart
    • 查看状态:service ssh status

SSH服务的基本配置

SSH配置文件

  • 主配置文件/etc/ssh/sshd_config
  • 用户配置文件~/.ssh/config

常用配置选项

  • Port:指定SSH服务监听的端口
  • ListenAddress:指定SSH服务监听的IP地址
  • PermitRootLogin:是否允许root用户登录
  • PasswordAuthentication:是否允许密码认证
  • PubkeyAuthentication:是否允许公钥认证
  • AuthorizedKeysFile:指定授权密钥文件的位置
  • MaxAuthTries:指定最大认证尝试次数
  • ClientAliveInterval:指定客户端活动间隔时间
  • ClientAliveCountMax:指定客户端活动最大次数

SSH密钥认证配置

密钥认证的优势

  • 更高的安全性:无需传输密码
  • 更方便的自动化:适合脚本和自动化工具
  • 更细粒度的访问控制:可以为不同用户配置不同密钥

生成SSH密钥对

# 生成RSA密钥对
ssh-keygen -t rsa -b 2048 -C "your_email@example.com"

# 生成ED25519密钥对(更安全、更高效)
ssh-keygen -t ed25519 -C "your_email@example.com"

配置公钥认证

  1. 将公钥复制到服务器

    # 使用ssh-copy-id命令
    ssh-copy-id user@server_ip
    
    # 手动复制
    cat ~/.ssh/id_rsa.pub | ssh user@server_ip 'mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys'
  2. 设置正确的权限

    # 在服务器上设置权限
    chmod 700 ~/.ssh
    chmod 600 ~/.ssh/authorized_keys

SSH服务的安全加固

基本安全措施

  • 更改默认端口:避免使用默认的22端口
  • 禁用root登录:禁止直接使用root用户登录
  • 限制允许登录的用户:使用AllowUsersAllowGroups选项
  • 禁用密码认证:只允许密钥认证
  • 设置登录失败限制:使用MaxAuthTriesLoginGraceTime选项

高级安全措施

  • 使用防火墙限制访问:只允许特定IP访问SSH端口
  • 使用Fail2ban:自动阻止多次登录失败的IP
  • 定期更新SSH版本:及时修补安全漏洞
  • 使用SSH密钥代理:管理多个SSH密钥
  • 配置双因素认证:增加额外的安全层

SSH服务的故障排查

常见问题及解决方案

  • 连接被拒绝:检查SSH服务是否运行,防火墙是否允许访问
  • 认证失败:检查用户名和密码是否正确,密钥权限是否正确
  • 连接超时:检查网络连接,防火墙设置,SSH配置
  • 权限错误:检查.ssh目录和文件的权限
  • 密钥不匹配:检查公钥是否正确复制到服务器

实用案例分析

案例1:基本SSH服务配置

配置步骤

  1. 安装SSH服务
# 在Ubuntu/Debian上安装
apt update
apt install openssh-server

# 在CentOS/RHEL上安装
yum install openssh-server

# 启动服务并设置自启
systemctl start sshd
systemctl enable sshd

# 查看服务状态
systemctl status sshd
  1. 基本配置
# 编辑SSH配置文件
vim /etc/ssh/sshd_config

# 修改以下配置
Port 2222              # 更改默认端口
PermitRootLogin no     # 禁用root登录
MaxAuthTries 3         # 限制认证尝试次数
ClientAliveInterval 30 # 客户端活动间隔
ClientAliveCountMax 3  # 客户端活动最大次数

# 保存配置并重启服务
systemctl restart sshd
  1. 配置防火墙
# 在Ubuntu/Debian上配置ufw
ufw allow 2222/tcp
ufw enable

# 在CentOS/RHEL上配置firewalld
firewall-cmd --permanent --add-port=2222/tcp
firewall-cmd --reload
  1. 测试连接
# 使用新端口连接
ssh -p 2222 user@server_ip

案例2:SSH密钥认证配置

配置步骤

  1. 生成密钥对
# 生成ED25519密钥对
ssh-keygen -t ed25519 -C "user@example.com"

# 查看生成的密钥
ls -la ~/.ssh/
  1. 将公钥复制到服务器
# 使用ssh-copy-id命令
ssh-copy-id -p 2222 user@server_ip

# 验证公钥是否复制成功
ssh -p 2222 user@server_ip 'cat ~/.ssh/authorized_keys'
  1. 禁用密码认证
# 编辑SSH配置文件
vim /etc/ssh/sshd_config

# 修改以下配置
PasswordAuthentication no
ChallengeResponseAuthentication no
UsePAM no

# 保存配置并重启服务
systemctl restart sshd
  1. 测试密钥认证
# 使用密钥认证连接
ssh -p 2222 user@server_ip

# 验证是否无需密码即可登录

案例3:SSH服务的安全加固

配置步骤

  1. 高级安全配置
# 编辑SSH配置文件
vim /etc/ssh/sshd_config

# 添加以下配置
# 限制允许登录的用户
AllowUsers user1 user2

# 限制登录时间
LoginGraceTime 30

# 禁用X11转发
X11Forwarding no

# 禁用TCP端口转发
AllowTcpForwarding no

# 禁用Agent转发
AllowAgentForwarding no

# 禁用DNS反向解析
UseDNS no

# 保存配置并重启服务
systemctl restart sshd
  1. 安装并配置Fail2ban
# 在Ubuntu/Debian上安装
apt install fail2ban

# 在CentOS/RHEL上安装
yum install epel-release
yum install fail2ban

# 创建配置文件
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
vim /etc/fail2ban/jail.local

# 添加SSH配置
[sshd]
enabled = true
port = 2222
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 3600

# 启动并启用Fail2ban
systemctl start fail2ban
systemctl enable fail2ban

# 查看Fail2ban状态
systemctl status fail2ban
fail2ban-client status
fail2ban-client status sshd
  1. 验证安全配置
# 测试连接
ssh -p 2222 user@server_ip

# 测试登录失败限制
# 连续输入错误密码,查看是否被禁止

案例4:SSH端口转发配置

配置步骤

  1. 本地端口转发(将远程服务映射到本地)
# 将远程服务器的8080端口映射到本地的80端口
ssh -L 80:localhost:8080 -p 2222 user@server_ip

# 现在访问本地的80端口就相当于访问远程服务器的8080端口
  1. 远程端口转发(将本地服务映射到远程)
# 将本地的3306端口映射到远程服务器的3306端口
ssh -R 3306:localhost:3306 -p 2222 user@server_ip

# 现在远程服务器访问本地的3306端口就相当于访问本地的3306端口
  1. 动态端口转发(创建SOCKS代理)
# 创建动态端口转发,本地端口为1080
ssh -D 1080 -p 2222 user@server_ip

# 现在可以将浏览器的代理设置为socks5://localhost:1080

课后练习

  1. 安装和配置SSH服务

    • 步骤:安装SSH服务 → 启动服务 → 基本配置 → 测试连接
    • 验证:能够使用SSH远程登录系统
  2. 配置SSH密钥认证

    • 步骤:生成密钥对 → 复制公钥到服务器 → 配置权限 → 禁用密码认证 → 测试连接
    • 验证:能够使用密钥认证无需密码登录
  3. SSH服务安全加固

    • 步骤:更改默认端口 → 禁用root登录 → 限制允许登录的用户 → 配置Fail2ban → 测试安全配置
    • 验证:尝试使用错误密码登录,查看是否被禁止
  4. 配置SSH端口转发

    • 步骤:配置本地端口转发 → 配置远程端口转发 → 配置动态端口转发 → 测试端口转发功能
    • 验证:能够通过端口转发访问相应的服务

总结

本集详细介绍了Linux系统中SSH服务的配置方法,包括:

  • SSH服务的概念和工作原理
  • SSH服务的安装和启动
  • SSH服务的基本配置
  • SSH密钥认证配置
  • SSH服务的安全加固
  • SSH服务的故障排查

通过本集的学习,读者应该能够理解SSH服务的基本原理,并能够独立配置和管理SSH服务。SSH服务是Linux系统中最重要的远程管理工具之一,掌握它的配置和管理技巧对于系统管理员来说非常重要。

在实际应用中,需要根据具体的安全需求,采取适当的安全措施来加固SSH服务,同时确保服务的可用性和可靠性。定期检查SSH服务的配置和日志,及时发现和解决问题,也是维护系统安全的重要环节。

« 上一篇 网络故障排查 下一篇 » FTP 服务配置