SSH 服务部署指南

在这里插入图片描述

本指南涵盖 OpenSSH 服务端的安装、配置密码/公钥/多因素认证,以及连接测试方法。
适用系统:Ubuntu/Debian、CentOS/RHEL 等主流 Linux 发行版。


1. 安装 SSH 服务端

Ubuntu/Debian
# 更新软件包索引
sudo apt update# 安装 OpenSSH 服务端
sudo apt install openssh-server -y# 启动服务并设置开机自启
sudo systemctl enable --now ssh
CentOS/RHEL
# 安装 OpenSSH 服务端
sudo yum install openssh-server -y# 启动服务并设置开机自启
sudo systemctl enable --now sshd
验证安装
# 检查服务状态
sudo systemctl status ssh   # Ubuntu/Debian
sudo systemctl status sshd  # CentOS/RHEL# 查看 SSH 端口监听
ss -tnlp | grep ssh

2. 基础配置 SSH 服务

编辑配置文件
sudo nano /etc/ssh/sshd_config
关键配置项(按需修改)
# 修改默认端口(可选,避免暴力破解)
Port 2222# 禁用 root 登录(安全建议)
PermitRootLogin no# 允许用户列表(为空表示允许所有用户)
AllowUsers alice bob# 禁用密码认证(推荐使用公钥后关闭)
PasswordAuthentication no# 启用公钥认证
PubkeyAuthentication yes# 指定公钥存储路径
AuthorizedKeysFile .ssh/authorized_keys# 配置日志级别
LogLevel VERBOSE
重启 SSH 服务生效
# Ubuntu/Debian
sudo systemctl restart ssh# CentOS/RHEL
sudo systemctl restart sshd

3. 配置认证方式

3.1 密码认证

默认已启用,如需禁用请设置 PasswordAuthentication no

3.2 公钥认证
客户端生成密钥对
# 在客户端机器执行
ssh-keygen -t ed25519 -C "your_email@example.com"
# 默认保存路径:~/.ssh/id_ed25519(私钥)和 ~/.ssh/id_ed25519.pub(公钥)
上传公钥到服务端
# 方法 1:使用 ssh-copy-id 自动上传
ssh-copy-id -p 22 -i ~/.ssh/id_ed25519.pub user@server_ip# 方法 2:手动追加公钥到 ~/.ssh/authorized_keys
cat ~/.ssh/id_ed25519.pub | ssh user@server_ip "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"
验证权限

服务端用户目录权限必须为:

  • ~/.ssh700
  • ~/.ssh/authorized_keys600
# 修复权限
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
3.3 多因素认证(MFA)
安装 Google Authenticator
# Ubuntu/Debian
sudo apt install libpam-google-authenticator -y# CentOS/RHEL
sudo yum install google-authenticator -y
生成 TOTP 密钥
google-authenticator
# 按提示操作,保存紧急备用码,选择基于时间的令牌
配置 PAM 模块
sudo nano /etc/pam.d/sshd

添加以下行:

auth required pam_google_authenticator.so
修改 SSH 配置
sudo nano /etc/ssh/sshd_config

确保以下配置:

ChallengeResponseAuthentication yes
AuthenticationMethods publickey,keyboard-interactive
重启 SSH 服务
sudo systemctl restart ssh   # Ubuntu/Debian
sudo systemctl restart sshd  # CentOS/RHEL

4. 防火墙配置

开放 SSH 端口
# Ubuntu/Debian (UFW)
sudo ufw allow 22/tcp   # 若修改了端口,替换为实际端口号
sudo ufw reload# CentOS/RHEL (Firewalld)
sudo firewall-cmd --permanent --add-service=ssh
sudo firewall-cmd --reload

5. 测试 SSH 连接

基本连接测试
# 使用密码认证
ssh -p 22 user@server_ip# 使用公钥认证(指定私钥路径)
ssh -p 22 -i ~/.ssh/id_ed25519 user@server_ip# 使用 MFA 认证(先公钥后 TOTP)
ssh -p 22 user@server_ip
# 连接时会提示输入验证码
调试连接问题
# 客户端开启详细日志
ssh -vvv user@server_ip# 查看服务端日志
sudo tail -f /var/log/auth.log        # Ubuntu/Debian
sudo tail -f /var/log/secure          # CentOS/RHEL

6. 安全加固建议

  1. 禁用弱加密算法
    /etc/ssh/sshd_config 中添加:

    Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com,aes128-gcm@openssh.com
    MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com
    
  2. 限制用户访问

    AllowUsers alice bob  # 仅允许特定用户
    DenyUsers root       # 禁止特定用户
    
  3. 启用 Fail2ban

    # 安装 Fail2ban
    sudo apt install fail2ban -y       # Ubuntu/Debian
    sudo yum install fail2ban -y       # CentOS/RHEL
    
  4. 定期更新系统

    sudo apt update && sudo apt upgrade -y   # Ubuntu/Debian
    sudo yum update -y                       # CentOS/RHEL
    

7. 常见问题解决

问题 1:公钥认证失败
  • 检查项
    • 服务端 ~/.ssh/authorized_keys 文件权限是否为 600
    • 客户端私钥权限是否为 600
    • SSH 配置中 PubkeyAuthentication 是否为 yes
问题 2:MFA 认证不生效
  • 检查项
    • PAM 配置 /etc/pam.d/sshd 是否包含 pam_google_authenticator.so
    • SSH 配置中 AuthenticationMethods 是否设置为 publickey,keyboard-interactive
问题 3:连接超时
  • 检查项
    • 防火墙是否开放 SSH 端口。
    • 服务端 SSH 服务是否运行。
    • 网络路由是否可达(使用 pingtraceroute 测试)。

通过本指南,您已掌握 Linux 下 SSH 服务的完整配置与管理方法。根据实际需求灵活选择认证方式,并遵循安全最佳实践,可显著提升系统的远程访问安全性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/904625.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《Python星球日记》 第46天:决策树与随机森林

名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 专栏:《Python星球日记》,限时特价订阅中ing 目录 一、前言二、决策树算法原理1. 决策树简介2. 决策树的分裂准则(1) 信息熵与信息增益(2) 基尼不纯…

Vue2:引入公共JS,通过this调用

tools.js // 图片加上前缀 baseurl 是请求域名 img 是图片路径export function getimgurl(img) {return ${this.$baseurl}${img}}main.js import baseUrl from "/api/baseUrl.js" Vue.prototype.$baseurl baseUrlimport {getimgurl} from /api/tool.js; Vue.protot…

【Hot 100】 146. LRU 缓存

目录 引言LRU 缓存官方解题LRU实现📌 实现步骤分解步骤 1:定义双向链表节点步骤 2:创建伪头尾节点(关键设计)步骤 3:实现链表基础操作操作 1:添加节点到头部操作 2:移除任意节点 步骤…

【Linux】swap交换分区管理

目录 一、Swap 交换分区的功能 二、swap 交换分区的典型大小的设置 2.1 查看交换分区的大小 2.1.1 free 2.1.2 cat /proc/swaps 或 swapon -s 2.1.3 top 三、使用交换分区的整体流程 3.1 案例一 3.2 案例二 一、Swap 交换分区的功能 计算机运行一个程序首先会将外存&am…

【计算机网络】用户从输入网址到网页显示,期间发生了什么?

1.URL解析 浏览器分解URL:https://www.example.com/page 协议:https域名:www.example.com路径:/page 2.DNS查询: 浏览器向DNS服务器发送查询请求,将域名解析为对应的IP地址。 3.CDN检查(如果有)&#…

架空输电线巡检机器人轨迹优化设计

架空输电线巡检机器人轨迹优化 摘要 本论文针对架空输电线巡检机器人的轨迹优化问题展开研究,综合考虑输电线复杂环境、机器人运动特性及巡检任务需求,结合路径规划算法、智能优化算法与机器人动力学约束,构建了多目标轨迹优化模型。通过改进遗传算法与模拟退火算法,有效…

根据窗口大小自动调整页面缩放比例,并保持居中显示

vue 项目 直接上代码 图片u1.png 是个背景图片 图片u2.png 是个遮罩 <template><div id"app"><div class"viewBox"><divclass"screen":style"{ transform: translate(-50%,-50%…

初学Python爬虫

文章目录 前言一、 爬虫的初识1.1 什么是爬虫1.2 爬虫的核心1.3 爬虫的用途1.4 爬虫分类1.5 爬虫带来的风险1.6. 反爬手段1.7 爬虫网络请求1.8 爬虫基本流程 二、urllib库初识2.1 http和https协议2.2 编码解码的使用2.3 urllib的基本使用2.4 一个类型六个方法2.5 下载网页数据2…

oracle 数据库sql 语句处理过程

14.1SQL语句处理过程 在进行SQL语句处理优化前&#xff0c;需要先熟悉和了解SQL语句的处理过程。 每种类型的语句在执行时都需要如下阶段&#xff1a; 第1步: 创建游标。 第2步: 分析语句。 第5步: 绑定变量。 第7步: t运行语句。 第9步: 关闭游标。 如果使用了并行功能&#x…

pm2 list查询服务时如何通过name或者namespace进行区分

在 PM2 中&#xff0c;如果 pm2 list 显示的所有服务名称&#xff08;name&#xff09;相同&#xff0c;就无法直观地区分不同的进程。这时可以通过 --namespace&#xff08;命名空间&#xff09; 或 自定义 name 来区分服务。以下是解决方案&#xff1a; 方法 1&#xff1a;启…

[python] 函数基础

二 函数参数 2.1 必备参数(位置参数) 含义: 传递和定义参数的顺序及个数必须一致 格式: def func(a,b) def func_1(id,passwd):print("id ",id)print("passwd ",passwd) func_1(10086,123456) 2.2 默认参数 函数: 为函数的参数提供一个默认值,如果调…

超大规模SoC后仿真流程与优化

在超大规模SoC设计中,是否需要进行全芯片后仿真(Full-Chip Post-layout Simulation)取决于多个因素,包括设计复杂度、项目风险、资源限制以及验证目标。以下是针对这一问题的系统性分析: 1. 全芯片后仿真的必要性 需要全芯片后仿真的场景 系统级交互验证: 跨模块信号交互…

深入理解 Docker 网络原理:构建高效、灵活的容器网络

在现代软件开发中&#xff0c;Docker 已经成为了容器化技术的代名词&#xff0c;广泛应用于开发、测试和生产环境。Docker 使得开发者能够将应用及其依赖打包成一个轻量级的容器&#xff0c;并通过 Docker 容器化技术来实现高效的部署与管理。 然而&#xff0c;在日常使用 Dock…

leetcode 242. Valid Anagram

题目描述 因为s和t仅仅包含小写字母&#xff0c;所以可以开一个26个元素的数组用来做哈希表。不过如果是unicode字符&#xff0c;那就用编程语言自带的哈希表。 class Solution { public:bool isAnagram(string s, string t) {int n s.size();if(s.size() ! t.size())return …

4、反应釜压力监控系统 - /自动化与控制组件/reaction-vessel-monitor

76个工业组件库示例汇总 反应釜压力监控组件 这是一个用于反应釜压力监控的自定义组件&#xff0c;专为化工厂反应釜压力监控设计。采用苹果工业风格界面&#xff0c;简洁优雅&#xff0c;功能实用&#xff0c;易于使用。 功能特点 实时压力可视化&#xff1a;直观展示反应…

系统思考助力富维东阳

刚刚完成了长春一家汽车零配件公司关于系统思考的项目&#xff01; 在开班仪式上&#xff0c;公司总经理深刻阐述了项目的背后意义&#xff0c;强调了系统思考与公司战略的紧密联系。这不仅是一次培训&#xff0c;更是一次关于“如何全方位看待问题”的深度对话。 在这个过程中…

Linux下的c/c++开发之操作Sqlite3数据库

libsqlite3-dev 介绍&#xff08;Linux 下的 SQLite3 C/C 开发包&#xff09; libsqlite3-dev 是一个开发包&#xff0c;在 Linux 环境下为使用 SQLite3 C API 进行开发的 C/C 程序员提供头文件&#xff08;如 sqlite3.h&#xff09;和静态库/动态库的链接信息&#xff08;如 …

【Prompt工程—文生图】案例大全

目录 一、人物绘图 二、卡通头像 三、风景图 四、logo设计图 五、动物形象图 六、室内设计图 七、动漫风格 八、二次元图 九、日常场景图 十、古风神化图 十一、游戏场景图 十二、电影大片质感 本文主要介绍了12种不同类型的文生图技巧&#xff0c;通过加入不同的图像…

GMRES算法处理多个右端项的Block与PseudoBlock变体

GMRES算法处理多个右端项的Block与PseudoBlock变体 Block与PseudoBlock GMRES简介 在处理多个右端项的线性方程组时&#xff0c;Block GMRES和PseudoBlock GMRES是两种常用的变体算法&#xff1a; Block GMRES&#xff1a;同时处理所有右端项&#xff0c;构建一个大的Krylov…

Ubuntu环境下如何管理系统中的用户:创建用户、删除用户、修改密码、切换用户、用户组管理

管理用户的操作需要root权限&#xff0c;在执行命令时需要加sudo&#xff0c;关于sudo命令可以看这篇&#xff1a;Linux_sudo命令的使用与机制 1、添加用户 使用命令&#xff1a; adduser 用户名&#xff0c;主要是按提示输入密码和用户信息&#xff08;可直接回车使用默认配置…