news 2026/7/12 2:41:27

OpenSSH 从入门到精通:协议、配置与密钥认证实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
OpenSSH 从入门到精通:协议、配置与密钥认证实战

摘要

本文系统梳理了 SSH 协议、OpenSSH 软件、服务配置、故障排查以及密钥认证等核心知识点。内容涵盖 SSH 协议基础、OpenSSH 组件构成、服务端配置优化、常见连接问题排查步骤,并详细演示了 Linux 与 Linux、Windows 与 Linux 之间基于密钥的免密登录配置过程。

1. SSH 协议与 OpenSSH 简介

协议 (Protocol):在数据交换过程中建立的标准和规则。在计算机领域,协议通常以软件形式实现,定义了数据的组成格式和交互方式。

SSH (Secure Shell):一种安全的网络协议,用于在不安全的网络上提供安全的远程登录和其他安全网络服务。

OpenSSH:是 SSH 协议的一个开源实现,它是一个远程控制软件,用于安全地远程操作 Linux 系统。其核心特性包括:

  • 加密传输:远程传输的数据经过加密,安全性高,难以破解。
  • 身份认证:支持密码和密钥等多种认证方式。
  • 常用加密算法:RSA、ECDSA、Ed25519。

2. OpenSSH 组件与安装

2.1 核心软件包

在 Rocky Linux/CentOS 系统中,OpenSSH 通常包含以下主要软件包:

  • openssh:完整元包,包含客户端、服务端、密钥生成工具及共享库。
  • openssh-clients:客户端包,包含ssh,scp,sftp等连接工具,用于主动连接其他 SSH 服务器。
  • openssh-server:服务器端包,包含sshd守护进程,用于开启 SSH 服务,允许他人连接。

查询已安装的 OpenSSH 相关包:

rpm -qa | grep openssh

2.2 从镜像安装软件

系统镜像(如光盘)是软件的重要来源。挂载光盘并查找软件包:

# 挂载光盘到 /mnt 目录 mount /dev/cdrom /mnt 进入 Packages 目录查找 openssh 相关包 cd /mnt/AppStream/Packages/ ls openssh* 使用 rpm 命令安装(注意依赖) rpm -ivh openssh-*.rpm

3. SSH 服务配置与加固

3.1 配置文件解析

  • sshd_config:SSH 服务端 (sshd) 的主配置文件,控制他人连接本机时的行为。
  • ssh_config:SSH 客户端的配置文件,控制本机主动连接他人时的行为。
  • 配置目录/etc/ssh/sshd_config.d/存放服务端子配置文件,优先级高于主配置文件。

配置加载顺序sshd进程先读取主配置文件sshd_config,再读取子配置文件*.conf,子配置会覆盖主配置中的相同项。

3.2 常见安全加固方法

编辑/etc/ssh/sshd_config或子配置文件进行加固:

  1. 修改默认端口:将端口从 22 改为 1024-65535 之间的任意端口。
    Port 2255
  2. 禁止 root 用户直接登录
    PermitRootLogin no
  3. 禁用密码认证,仅使用密钥登录(更高安全级别):
    PasswordAuthentication no PubkeyAuthentication yes

注意:在启用 SELinux 时,修改默认端口可能导致连接失败,需临时或永久禁用 SELinux。

3.3 服务管理

修改配置后必须重启服务使配置生效:

systemctl restart sshd # 或 service sshd restart

验证服务状态与端口监听:

# 查看 sshd 进程 ps aux | grep sshd 查看端口监听情况 ss -anplut | grep sshd 或 netstat -anlutp | grep sshd 查看特定端口被哪个进程占用 lsof -i:2255

4. SSH 连接问题排查流程

当 SSH 连接失败时,可按以下步骤排查:

  1. 测试网络连通性:使用ping命令检查目标 IP 是否可达。
  2. 检查 SSH 服务状态:确认sshd进程是否运行,端口是否监听。
  3. 确认端口号:检查客户端是否使用了正确的端口(非默认 22 端口时需指定-p)。
  4. 检查用户限制:确认配置文件是否限制了特定用户登录。
  5. 查看日志:检查/var/log/secure/var/log/auth.log获取详细错误信息。
  6. 检查防火墙与 SELinux
    • 临时关闭防火墙:systemctl stop firewalld
    • 禁用防火墙开机自启:systemctl disable firewalld
    • 查看 SELinux 状态:getenforce
    • 临时关闭 SELinux:setenforce 0
    • 永久禁用 SELinux:编辑/etc/selinux/config,设置SELINUX=disabled并重启。
  7. 检查 SSH 配置:确认是否配置了禁止密码登录等限制。

5. SSH 密钥认证实战

5.1 Linux 与 Linux 之间密钥认证

目标:实现从 Client 机(如 Ubuntu)到 Server 机(如 Rocky Linux)的免密登录。

步骤

  1. 在 Client 端生成密钥对
    ssh-keygen -t ed25519 # 默认保存在 ~/.ssh/id_ed25519(私钥)和 ~/.ssh/id_ed25519.pub(公钥)
  2. 将公钥传输到 Server 端
    ssh-copy-id -i ~/.ssh/id_ed25519.pub -p 2255 username@server_ip # 例如:ssh-copy-id -p 2255 fanzb@192.168.10.228

    该命令会将公钥自动追加到 Server 端用户家目录的~/.ssh/authorized_keys文件中。

  3. 验证免密登录
    ssh -p 2255 username@server_ip # 例如:ssh -p 2255 fanzb@192.168.10.228

5.2 Windows (Xshell) 与 Linux 之间密钥认证

目标:使用 Xshell 通过密钥登录 Linux 服务器。

步骤

  1. 在 Xshell 中生成密钥对
    • 打开 Xshell,点击菜单栏「工具」-「新建用户密钥生成向导」。
    • 选择密钥类型(如 RSA)和密钥长度,生成密钥对。
    • 将生成的公钥内容保存下来。
  2. 在 Linux Server 上配置公钥
    • 登录 Server,进入相应用户的家目录(例如普通用户fanzb)。
    • 创建或编辑~/.ssh/authorized_keys文件。
    • 将 Xshell 生成的公钥内容粘贴到该文件中,每行一个公钥。
    • 设置正确的文件权限:
      chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys
  3. 在 Xshell 中配置连接
    • 新建会话,填写主机 IP 和端口。
    • 在「用户身份验证」方法中选择「Public Key」,并浏览选择刚才生成的私钥文件。
    • 连接即可实现免密登录。

6. 常用客户端工具

  • ssh:远程登录。
    ssh -p 2255 user@host_ip
  • scp:安全拷贝文件。
    # 上传文件到远程 scp -P 2255 local_file user@host_ip:remote_path 从远程下载文件 scp -P 2255 user@host_ip:remote_file local_path

    注意scp使用大写的-P指定端口,而ssh使用小写的-p

  • sftp:交互式安全文件传输。

7. 总结

  1. 安全第一:修改默认端口、禁用 root 登录、使用密钥认证是加固 SSH 服务的三大有效措施。
  2. 配置管理:理解主配置文件与子配置文件的优先级,修改后务必重启服务。
  3. 故障排查:按照“网络 → 服务 → 端口 → 配置 → 防火墙/SELinux → 日志”的顺序进行排查。
  4. 密钥管理:私钥务必妥善保管,公钥分发到目标服务器的~/.ssh/authorized_keys文件中。
  5. 环境准备:实验或生产环境部署前,建议先关闭防火墙和 SELinux 以避免干扰,待调试完成后再按需开启。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/12 2:38:37

ECharts 5.x 深色主题适配:坐标轴与网格线5步配色方案

ECharts 5.x 深色主题适配:坐标轴与网格线5步配色方案深色主题已成为现代Web应用的标配设计语言,尤其在数据可视化领域,合理的深色配色方案能显著提升图表可读性和视觉舒适度。本文将系统讲解ECharts 5.x在深色背景下的坐标轴、网格线等核心元…

作者头像 李华
网站建设 2026/7/12 2:38:19

CODEX智能体开发实战:30天从零构建AI应用完整指南

这次我们来看一个面向零基础开发者的 CODEX 智能体实战教程。如果你对 AI 智能体开发感兴趣,但担心编程门槛太高、环境配置复杂,这篇文章将带你从安装配置到项目实战,用 30 天时间系统掌握 CODEX 智能体的核心能力。 CODEX 是一个集成了 Dee…

作者头像 李华
网站建设 2026/7/12 2:35:31

HarmonyOS运动健康——数据服务层与数据架构

每个页面展示的步数、训练计划、动作列表、饮食记录,背后都指向同一个文件:WorkoutData.ets。这个文件是整个App的数据层,所有页面的数据都从这里导出。 拆解一个App不能只看UI,还要看数据是怎么组织的。数据层的设计决定了页面能…

作者头像 李华
网站建设 2026/7/12 2:35:08

AutoMoT:统一VLA架构的自动驾驶新范式

1. AutoMoT不是又一个“端到端黑箱”,而是把自动驾驶的“感知-理解-决策-执行”链条第一次真正拧成一股绳你有没有试过在高速上打开辅助驾驶,突然前方一辆车毫无征兆地压线变道,系统却迟滞半秒才开始减速?或者在无保护左转时&…

作者头像 李华