第101集:SSH 服务配置
教学目标
- 理解SSH服务的基本概念和工作原理
- 掌握SSH服务的安装和基本配置方法
- 学习SSH密钥认证的配置和使用
- 了解SSH服务的安全加固措施
- 能够独立配置和管理SSH服务
主要知识点
- SSH服务的概念和工作原理
- SSH服务的安装和启动
- SSH服务的基本配置
- SSH密钥认证配置
- SSH服务的安全加固
- SSH服务的故障排查
核心知识点讲解
SSH服务的概念和工作原理
SSH简介
SSH(Secure Shell)是一种网络协议,用于在不安全的网络中为网络服务提供安全的加密通信。它主要用于远程登录系统和执行命令,但也支持其他功能,如文件传输和端口转发。
SSH工作原理
- 建立连接:客户端向服务器发起连接请求
- 密钥交换:客户端和服务器交换密钥,建立加密通道
- 身份验证:客户端向服务器证明自己的身份
- 会话建立:身份验证成功后,建立加密会话
- 数据传输:通过加密通道传输数据
SSH协议版本
- SSH-1:早期版本,存在安全漏洞,已不推荐使用
- SSH-2:当前主流版本,提供更强的安全性
SSH服务的安装和启动
在不同发行版上安装SSH服务
- Ubuntu/Debian:
apt install openssh-server - CentOS/RHEL:
yum install openssh-server或dnf install openssh-server - Arch Linux:
pacman -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"配置公钥认证
将公钥复制到服务器:
# 使用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'设置正确的权限:
# 在服务器上设置权限 chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys
SSH服务的安全加固
基本安全措施
- 更改默认端口:避免使用默认的22端口
- 禁用root登录:禁止直接使用root用户登录
- 限制允许登录的用户:使用
AllowUsers或AllowGroups选项 - 禁用密码认证:只允许密钥认证
- 设置登录失败限制:使用
MaxAuthTries和LoginGraceTime选项
高级安全措施
- 使用防火墙限制访问:只允许特定IP访问SSH端口
- 使用Fail2ban:自动阻止多次登录失败的IP
- 定期更新SSH版本:及时修补安全漏洞
- 使用SSH密钥代理:管理多个SSH密钥
- 配置双因素认证:增加额外的安全层
SSH服务的故障排查
常见问题及解决方案
- 连接被拒绝:检查SSH服务是否运行,防火墙是否允许访问
- 认证失败:检查用户名和密码是否正确,密钥权限是否正确
- 连接超时:检查网络连接,防火墙设置,SSH配置
- 权限错误:检查
.ssh目录和文件的权限 - 密钥不匹配:检查公钥是否正确复制到服务器
实用案例分析
案例1:基本SSH服务配置
配置步骤:
- 安装SSH服务
# 在Ubuntu/Debian上安装
apt update
apt install openssh-server
# 在CentOS/RHEL上安装
yum install openssh-server
# 启动服务并设置自启
systemctl start sshd
systemctl enable sshd
# 查看服务状态
systemctl status sshd- 基本配置
# 编辑SSH配置文件
vim /etc/ssh/sshd_config
# 修改以下配置
Port 2222 # 更改默认端口
PermitRootLogin no # 禁用root登录
MaxAuthTries 3 # 限制认证尝试次数
ClientAliveInterval 30 # 客户端活动间隔
ClientAliveCountMax 3 # 客户端活动最大次数
# 保存配置并重启服务
systemctl restart sshd- 配置防火墙
# 在Ubuntu/Debian上配置ufw
ufw allow 2222/tcp
ufw enable
# 在CentOS/RHEL上配置firewalld
firewall-cmd --permanent --add-port=2222/tcp
firewall-cmd --reload- 测试连接
# 使用新端口连接
ssh -p 2222 user@server_ip案例2:SSH密钥认证配置
配置步骤:
- 生成密钥对
# 生成ED25519密钥对
ssh-keygen -t ed25519 -C "user@example.com"
# 查看生成的密钥
ls -la ~/.ssh/- 将公钥复制到服务器
# 使用ssh-copy-id命令
ssh-copy-id -p 2222 user@server_ip
# 验证公钥是否复制成功
ssh -p 2222 user@server_ip 'cat ~/.ssh/authorized_keys'- 禁用密码认证
# 编辑SSH配置文件
vim /etc/ssh/sshd_config
# 修改以下配置
PasswordAuthentication no
ChallengeResponseAuthentication no
UsePAM no
# 保存配置并重启服务
systemctl restart sshd- 测试密钥认证
# 使用密钥认证连接
ssh -p 2222 user@server_ip
# 验证是否无需密码即可登录案例3:SSH服务的安全加固
配置步骤:
- 高级安全配置
# 编辑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- 安装并配置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- 验证安全配置
# 测试连接
ssh -p 2222 user@server_ip
# 测试登录失败限制
# 连续输入错误密码,查看是否被禁止案例4:SSH端口转发配置
配置步骤:
- 本地端口转发(将远程服务映射到本地)
# 将远程服务器的8080端口映射到本地的80端口
ssh -L 80:localhost:8080 -p 2222 user@server_ip
# 现在访问本地的80端口就相当于访问远程服务器的8080端口- 远程端口转发(将本地服务映射到远程)
# 将本地的3306端口映射到远程服务器的3306端口
ssh -R 3306:localhost:3306 -p 2222 user@server_ip
# 现在远程服务器访问本地的3306端口就相当于访问本地的3306端口- 动态端口转发(创建SOCKS代理)
# 创建动态端口转发,本地端口为1080
ssh -D 1080 -p 2222 user@server_ip
# 现在可以将浏览器的代理设置为socks5://localhost:1080课后练习
安装和配置SSH服务
- 步骤:安装SSH服务 → 启动服务 → 基本配置 → 测试连接
- 验证:能够使用SSH远程登录系统
配置SSH密钥认证
- 步骤:生成密钥对 → 复制公钥到服务器 → 配置权限 → 禁用密码认证 → 测试连接
- 验证:能够使用密钥认证无需密码登录
SSH服务安全加固
- 步骤:更改默认端口 → 禁用root登录 → 限制允许登录的用户 → 配置Fail2ban → 测试安全配置
- 验证:尝试使用错误密码登录,查看是否被禁止
配置SSH端口转发
- 步骤:配置本地端口转发 → 配置远程端口转发 → 配置动态端口转发 → 测试端口转发功能
- 验证:能够通过端口转发访问相应的服务
总结
本集详细介绍了Linux系统中SSH服务的配置方法,包括:
- SSH服务的概念和工作原理
- SSH服务的安装和启动
- SSH服务的基本配置
- SSH密钥认证配置
- SSH服务的安全加固
- SSH服务的故障排查
通过本集的学习,读者应该能够理解SSH服务的基本原理,并能够独立配置和管理SSH服务。SSH服务是Linux系统中最重要的远程管理工具之一,掌握它的配置和管理技巧对于系统管理员来说非常重要。
在实际应用中,需要根据具体的安全需求,采取适当的安全措施来加固SSH服务,同时确保服务的可用性和可靠性。定期检查SSH服务的配置和日志,及时发现和解决问题,也是维护系统安全的重要环节。