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

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

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

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

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

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

相关推荐
xiami_world2 小时前
私有化部署协同白板选型指南:从Docker容器化到信创全栈适配的架构实践
运维·人工智能·docker·ai·持续部署
weixin_307779132 小时前
从脚本执行到智能体协作:AI辅助测试能力的范式重构
运维·开发语言·人工智能·算法·测试用例
Yiyaoshujuku2 小时前
化学谱图数据API接口,数据字段一览!
linux·服务器·前端
__Witheart__2 小时前
make menuconfig 使用全流程
linux·ubuntu·rockchip
2601_951645782 小时前
Linux 编程语言全解析:C、C++、Python、Go、Rust 谁更强?
linux·python·go·c·编程语言
阿坤带你走近大数据2 小时前
Linux中管道符的作用
java·linux·服务器
Fcy6482 小时前
Linux下 进程信号初识和信号的产生
linux·运维·信号的产生
爱装代码的小瓶子2 小时前
安工大Linux考点分类真题解析(含知识点是试卷原题了)
linux·服务器·网络·c
hweiyu002 小时前
Linux命令:sudoedit
linux·运维·服务器