Linux SSH服务端配置指南

前言

本文档详细介绍了如何在本地Linux系统上配置SSH服务端,使其能够接受远程连接。内容涵盖安装配置、安全优化、故障排查等关键环节,适合系统管理员和开发人员参考。

1. SSH服务端基础配置

1.1 安装OpenSSH服务端

问题:如何在Ubuntu系统上安装SSH服务端?

解答:

复制代码
# 更新软件包列表
sudo apt update
​
# 安装OpenSSH服务端
sudo apt install -y openssh-server
​
# 启动SSH服务并设置开机自启
sudo systemctl enable ssh
sudo systemctl start ssh

1.2 基础配置文件修改

问题:SSH服务端的主要配置文件是什么?

解答: SSH服务端的主要配置文件位于 /etc/ssh/sshd_config。建议在修改前先备份原始配置:

复制代码
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak

2. 安全配置优化

2.1 修改默认配置

问题:如何优化SSH服务端的安全配置?

解答:

复制代码
# 编辑配置文件
sudo nano /etc/ssh/sshd_config
​
# 推荐的安全配置
Port 22
PermitRootLogin prohibit-password
PasswordAuthentication yes
PubkeyAuthentication yes
PermitEmptyPasswords no
ChallengeResponseAuthentication no
UsePAM yes
ClientAliveInterval 60
ClientAliveCountMax 3

2.2 防火墙配置

问题:如何配置防火墙以允许SSH连接?

解答:

复制代码
# 使用UFW防火墙
sudo ufw allow 22/tcp
sudo ufw enable
​
# 或使用iptables
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT

3. 一键部署脚本

3.1 完整部署脚本

问题:能否提供一键部署SSH服务端的脚本?

解答:

复制代码
#!/bin/bash
# Ubuntu一键配置SSH服务端脚本
​
# 安装OpenSSH服务端
sudo apt update
sudo apt install -y openssh-server
​
# 备份原始配置
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak.$(date +%Y%m%d)
​
# 写入优化配置
sudo cat << 'EOF' | sudo tee /etc/ssh/sshd_config
Port 22
ListenAddress 0.0.0.0
Protocol 2
PermitRootLogin prohibit-password
PasswordAuthentication yes
PubkeyAuthentication yes
PermitEmptyPasswords no
ChallengeResponseAuthentication no
UsePAM yes
ClientAliveInterval 60
ClientAliveCountMax 3
X11Forwarding yes
PrintMotd no
LogLevel INFO
EOF
​
# 启动服务
sudo systemctl enable ssh
sudo systemctl start ssh
​
# 配置防火墙
if command -v ufw &> /dev/null; then
    sudo ufw allow 22/tcp
    sudo ufw --force enable
fi
​
echo "SSH服务端配置完成!"

4. 常用命令速查

4.1 服务管理命令

问题:常用的SSH服务管理命令有哪些?

解答:

复制代码
# 启动SSH服务
sudo systemctl start ssh
​
# 停止SSH服务
sudo systemctl stop ssh
​
# 重启SSH服务
sudo systemctl restart ssh
​
# 查看服务状态
sudo systemctl status ssh
​
# 设置开机自启
sudo systemctl enable ssh
​
# 禁用开机自启
sudo systemctl disable ssh

4.2 连接测试命令

问题:如何测试SSH连接?

解答:

复制代码
# 本地测试连接
ssh localhost
​
# 远程连接测试
ssh username@remote_ip
​
# 指定端口连接
ssh -p 2222 username@remote_ip
​
# 使用指定密钥连接
ssh -i ~/.ssh/id_rsa username@remote_ip

5. 故障排查

5.1 常见问题处理

问题:SSH连接失败的常见原因有哪些?

解答:

1. 服务未启动

复制代码
# 检查服务状态
sudo systemctl status ssh
​
# 启动服务
sudo systemctl start ssh

2. 防火墙阻止

复制代码
# 检查防火墙状态
sudo ufw status
​
# 放行SSH端口
sudo ufw allow 22/tcp

3. 配置文件错误

复制代码
# 检查配置文件语法
sudo sshd -t
​
# 查看错误日志
sudo journalctl -u ssh -f

5.2 端口监听检查

问题:如何检查SSH端口是否正常监听?

解答:

复制代码
# 使用netstat检查
sudo netstat -tlnp | grep sshd
​
# 使用ss命令检查
sudo ss -tlnp | grep sshd
​
# 检查特定端口
sudo lsof -i :22

6. 安全加固建议

6.1 进一步安全配置

问题:如何进一步提升SSH服务的安全性?

解答:

1. 禁用密码登录

复制代码
# 编辑配置文件
sudo nano /etc/ssh/sshd_config
​
# 修改配置
PasswordAuthentication no
​
# 重启服务
sudo systemctl restart ssh

2. 修改默认端口

复制代码
# 编辑配置文件
sudo nano /etc/ssh/sshd_config
​
# 修改端口
Port 2222
​
# 重启服务
sudo systemctl restart ssh
​
# 更新防火墙规则
sudo ufw allow 2222/tcp
sudo ufw delete allow 22/tcp

3. 安装Fail2Ban

复制代码
# 安装Fail2Ban
sudo apt install -y fail2ban
​
# 启动服务
sudo systemctl enable fail2ban
sudo systemctl start fail2ban

6.2 密钥认证配置

问题:如何配置SSH密钥认证?

解答:

1. 生成密钥对

复制代码
# 在客户端生成密钥
ssh-keygen -t ed25519 -C "your_email@example.com"
​
# 或使用RSA
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

2. 上传公钥

复制代码
# 使用ssh-copy-id
ssh-copy-id -i ~/.ssh/id_ed25519.pub username@remote_ip
​
# 手动上传
cat ~/.ssh/id_ed25519.pub | ssh username@remote_ip "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"

7. 总结

本文档详细介绍了Linux系统上SSH服务端的配置方法,从基础安装到安全优化,再到故障排查,为读者提供了完整的配置指南。通过本文档的学习,读者应该能够熟练配置和管理Linux系统的SSH服务,确保远程连接的安全性和可靠性。

关键要点回顾:

  • SSH服务端配置文件为 /etc/ssh/sshd_config

  • 修改配置后需要重启服务生效

  • 防火墙配置是确保连接成功的重要环节

  • 密钥认证比密码认证更安全

  • 定期检查日志和更新配置是维护安全的关键

希望本文档对您的工作有所帮助!

相关推荐
律宏阔3 小时前
WSL Docker 端口明明空闲,但就是绑不上端口
linux·windows
律宏阔3 小时前
WSL 突然断网,无法 ping 内网或外网
linux·windows
穷人小水滴3 小时前
用容器编译 VirtualBox 虚拟机软件 (ArchLinux, podman)
linux·容器·virtualbox
乱码三千4 小时前
如何优雅地直连无公网 IP 的远程 GPU 服务器
linux·人工智能·程序员
yunwei374 小时前
使用 eBPF 跟踪 Nginx 请求
linux·后端·性能优化
yunwei374 小时前
使用 eBPF 跟踪 MySQL 查询
linux·后端·性能优化
yunwei374 小时前
eBPF 示例教程:使用 XDP 捕获 TCP 信息
linux·后端·性能优化
judezh4 小时前
api 容器一直 unhealthy?我把一个 Agent 运行时的健康检查逐条拆了,查出四个问题
运维·docker
GeW4 小时前
制造业高端化,为什么必须重估Linux和数据库?
linux
百万蹄蹄向前冲4 小时前
双端同步!云服务器装最新Node.js v26.10全过程追踪
服务器·人工智能·node.js