当前位置: 首页 > news >正文

【踩坑日记】【教程】如何在ubuntu服务器上配置公钥登录以及bug解决

前言

在日常开发和运维中,为了提高服务器登录的安全性,我们通常会选择使用 SSH 密钥认证 来替代传统的密码登录。然而,在配置 SSH 公钥登录的过程中,可能会遇到各种坑和 Bug。本文将从零开始,手把手教你如何在 Ubuntu 服务器上配置 SSH 公钥登录,并分享实际操作中遇到的问题及其解决方法。


环境说明

  • 本地设备:Windows 10
  • 远程服务器:Ubuntu
  • 操作目标:通过 SSH 公钥认证登录 Ubuntu 服务器

一、SSH 公钥登录的配置步骤

1. 在本地生成 SSH 密钥对

首先,我们需要在本地生成一对 SSH 密钥(公钥和私钥)。在 Windows 上可以使用终端工具(如 PowerShell、Git Bash 或 WSL)运行以下命令:

ssh-keygen -t rsa -b 2048
  • 系统会提示保存密钥文件的位置,默认路径为 C:\Users\<你的用户名>\.ssh\id_rsa
  • 按照提示操作,回车即可完成。如果需要为密钥设置密码,可以自行输入(可选)。

最终会生成以下两个文件:

  • id_rsa:私钥,保存在本地,用于身份认证。请妥善保管,切勿泄露。
  • id_rsa.pub:公钥,上传到服务器,用于验证身份。

2. 将公钥上传到服务器

在 Windows 上没有 ssh-copy-id 工具,因此我们需要手动上传公钥到服务器。

方法 1:手动复制公钥
  1. 查看本地公钥内容:

    type C:\Users\<你的用户名>\.ssh\id_rsa.pub
    

    复制输出内容。

  2. 登录到服务器:

    ssh username@server_ip
    

    替换 usernameserver_ip 为你的服务器用户名和 IP 地址。

  3. 在服务器上创建 .ssh 文件夹并设置权限:

    mkdir -p ~/.ssh
    chmod 700 ~/.ssh
    
  4. 编辑或创建 authorized_keys 文件,将公钥内容粘贴进去:

    nano ~/.ssh/authorized_keys
    

    粘贴后保存并退出。

  5. 设置文件权限:

    chmod 600 ~/.ssh/authorized_keys
    

3. 测试 SSH 公钥登录

完成上述步骤后,退出服务器并尝试使用 SSH 密钥登录:

ssh -i C:\Users\<你的用户名>\.ssh\id_rsa username@server_ip

如果配置正确,你应该可以直接登录而无需输入密码。


二、遇到的 Bug 和解决过程

问题描述

在本地配置好公钥后,仍然无法通过 SSH 密钥登录服务器,客户端一直提示需要输入密码。查看服务器日志后发现以下错误:

Failed password for hw from 192.168.0.100 port 54545 ssh2

排查与解决过程

  1. 检查 SSH 服务配置
    编辑服务器上的 /etc/ssh/sshd_config 文件,确保以下配置项正确:

    PubkeyAuthentication yes
    AuthorizedKeysFile .ssh/authorized_keys
    PasswordAuthentication yes    # 用于调试时保留
    

    修改完成后,重启 SSH 服务:

    sudo systemctl restart ssh
    
  2. 检查 authorized_keys 文件权限
    确保 ~/.ssh 文件夹和 authorized_keys 文件的权限正确:

    chmod 700 ~/.ssh
    chmod 600 ~/.ssh/authorized_keys
    
  3. 检查文件所有者
    问题的根本原因是:authorized_keys 文件的所有者不正确。通过以下命令发现文件归属不是登录的用户:

    ls -l ~/.ssh/authorized_keys
    

    修复所有权问题:

    chown username:username ~/.ssh/authorized_keys
    

    再次尝试登录,问题解决。


三、从其他设备登录服务器

1. 如何避免安全警告

当你从另一台设备首次连接到服务器时,客户端会提示以下信息:

The authenticity of host '192.168.0.22' can't be established.
Are you sure you want to continue connecting (yes/no/[fingerprint])?

这属于正常现象,因为这是 SSH 的安全机制,用于防止中间人攻击。如果确定服务器可信,可以输入 yes 接受。

客户端会将服务器的主机密钥保存到本地 ~/.ssh/known_hosts 文件中,之后不再提示。


2. 多设备登录是否会互相影响?

SSH 支持多个设备同时连接到同一个服务器账户,不会因为从一台设备登录而「顶掉」另一台设备的会话。你可以通过以下命令查看所有当前活动的 SSH 会话:

who

或者:

w

例如,输出如下:

username pts/0 192.168.0.100 17:40 (bash)
username pts/1 192.168.0.101 17:50 (bash)

这里表示同一个用户通过两台设备分别从 IP 192.168.0.100192.168.0.101 登录。


相关文章:

【踩坑日记】【教程】如何在ubuntu服务器上配置公钥登录以及bug解决

前言 在日常开发和运维中&#xff0c;为了提高服务器登录的安全性&#xff0c;我们通常会选择使用 SSH 密钥认证 来替代传统的密码登录。然而&#xff0c;在配置 SSH 公钥登录的过程中&#xff0c;可能会遇到各种坑和 Bug。本文将从零开始&#xff0c;手把手教你如何在 Ubuntu…...

insmod一个ko提供基础函数供后insmod的ko使用的方法

一、背景 在内核模块开发时&#xff0c;多个不同的内核模块&#xff0c;有时候可能需要都共用一些公共的函数&#xff0c;比如申请一些平台性的公共资源。但是&#xff0c;这些公共的函数又不方便去加入到内核镜像里&#xff0c;这时候就需要把这些各个内核模块需要用到的一些…...

七、传统循环神经网络(RNN)

传统循环神经网络 RNN 前言一、RNN 是什么&#xff1f;1.1 RNN 的结构1.2 结构举例 二、RNN 模型的分类2.1 按照 输入跟输出 的结构分类2.2 按照 内部结构 分类 三、传统 RNN 模型3.1 RNN内部结构图3.2 内部计算公式3.3 其中 tanh 激活函数的作用3.4 传统RNN优缺点 四、代码演示…...

LeetCode:19.删除链表倒数第N个节点

跟着carl学算法&#xff0c;本系列博客仅做个人记录&#xff0c;建议大家都去看carl本人的博客&#xff0c;写的真的很好的&#xff01; 代码随想录 LeetCode&#xff1a;19.删除链表倒数第N个节点 给你一个链表&#xff0c;删除链表的倒数第 n 个结点&#xff0c;并且返回链表…...

【RISC-V CPU debug 专栏 2 -- Debug Module (DM), non-ISA】

文章目录 调试模块(DM)功能必须支持的功能可选支持的功能兼容性要求规模限制Debug Module Interface (DMI)总线类型地址与操作地址空间控制机制Debug Module Interface Signals请求信号响应信号信号流程Reset Control复位控制方法全局复位 (`ndmreset`)Hart 复位 (`hartreset…...

单片机学习笔记 11. 外部中断

更多单片机学习笔记&#xff1a;单片机学习笔记 1. 点亮一个LED灯单片机学习笔记 2. LED灯闪烁单片机学习笔记 3. LED灯流水灯单片机学习笔记 4. 蜂鸣器滴~滴~滴~单片机学习笔记 5. 数码管静态显示单片机学习笔记 6. 数码管动态显示单片机学习笔记 7. 独立键盘单片机学习笔记 8…...

基于stm32的智能教室管理系统/智能家居系统

基于stm32的智能教室管理系统/智能家居系统 持续更新&#xff0c;欢迎关注!!! ** 基于stm32的智能教室管理系统/智能家居系统 ** 目前&#xff0c;物联网已广泛应用在我们的生活中。智慧校园是将校园中的生活、学习、工作等相关的资源联系在一起&#xff0c;实现管理的智能化…...

基于 Qt 和 GStreamer 的环境中构建播放器

一、功能与需求分析 功能描述 播放本地视频文件(如 MP4、MKV)。 支持基本控制功能(播放、暂停、停止、跳转)。 提供音量调节功能。 在 Windows 环境下使用 Visual Studio 2022 编译。 技术选型 Qt:用于构建用户界面。 GStreamer:负责视频解码和播放。 Visual Studio 202…...

windows docker 入门

这个教程将指导你如何安装Docker、运行第一个容器以及理解一些基本概念。 第一步&#xff1a;安装Docker Desktop for Windows 系统要求&#xff1a; Windows 10 64位版本&#xff08;专业版、企业版或教育版&#xff09;。启用Hyper-V和Windows Subsystem for Linux (WSL 2)。…...

baomidou Mabatis plus引入异常

1 主要异常信息 Error creating bean with name dataSource 但是有个重要提示 dynamic-datasource Please check the setting of primary 解决方法&#xff1a; <dependency><groupId>com.baomidou</groupId><artifactId>dynamic-datasource-spring…...

深度学习中的正则化模型是什么意思?

一、定义 在深度学习中&#xff0c;正则化是一种用于防止过拟合的技术。过拟合是指模型在训练数据上表现非常好&#xff0c;但在新的、未见过的数据&#xff08;测试数据&#xff09;上表现很差的情况。正则化模型就是通过在损失函数中添加额外的项来约束模型的复杂度&#xf…...

修改IDEA配置导致Spring Boot项目读取application.properties中文乱码问题

之前很多配置都是放在nacos里面&#xff0c;然后这次同事有个配置写在application.properties中&#xff0c;这个配置含有中文&#xff0c;启动之后发现拿到的中文值会乱码&#xff0c;然后就帮忙看了一下问题。 排查问题 经过不停的百度、排查发现&#xff0c;spring读取app…...

Flink 热存储维表 使用 Guava Cache 减轻访问压力

目录 背景 Guava Cache 简介 实现方案 1. 项目依赖 2. Guava Cache 集成到 Flink (1) 定义 Cache (2) 使用 Cache 优化维表查询 3. 应用运行效果 (1) 维表查询逻辑优化 (2) 减少存储压力 Guava Cache 配置优化 总结 背景 在实时计算场景中&#xff0c;Flink 应用中…...

深入探索SenseVoiceSmall:高效多语言语音识别与处理模型

引言 随着人工智能技术的飞速发展&#xff0c;语音识别技术已经广泛应用于智能助手、客户服务、智能家居等多个领域。然而&#xff0c;现有的语音识别模型往往存在资源消耗大、多语言支持不足等问题。今天&#xff0c;我们要介绍的是来自ModelScope平台的SenseVoiceSmall模型&…...

Flink--API 之Transformation-转换算子的使用解析

目录 一、常用转换算子详解 &#xff08;一&#xff09;map 算子 &#xff08;二&#xff09;flatMap 算子 &#xff08;三&#xff09;filter 算子 &#xff08;四&#xff09;keyBy 算子 元组类型 POJO &#xff08;五&#xff09;reduce 算子 二、合并与连接操作 …...

每日十题八股-2024年11月27日

1.类型互转会出现什么问题吗&#xff1f; 2.为什么用bigDecimal 不用double &#xff1f; 3.装箱和拆箱是什么&#xff1f; 4.Java为什么要有Integer&#xff1f; 5.Integer相比int有什么优点&#xff1f; 6.那为什么还要保留int类型&#xff1f; 7.说一下 integer的缓存 8.怎么…...

OpenCV截取指定图片区域

import cv2 img cv2.imread(F:/2024/Python/demo1/test1/man.jpg) cv2.imshow(Image, img) # 显示图片 #cv2.waitKey(0) # 等待按键x, y, w, h 500, 100, 200, 200 # 示例坐标 roi img[y:yh, x:xw] # 截取指定区域 cv2.imshow(ROI, roi) cv2.waitKey(0) cv…...

Java部分新特性

模式匹配 instance of 模式匹配 之前写法 public void print(Object o) {if (o instanceof String){String str (String) obj;System.out.println("This is a String of length " s.length());} else {System.out.println("This is not a String");} …...

【SpringBoot】28 API接口防刷(Redis + 拦截器)

Gitee仓库 https://gitee.com/Lin_DH/system 介绍 常用的 API 安全措施包括&#xff1a;防火墙、验证码、鉴权、IP限制、数据加密、限流、监控、网关等&#xff0c;以确保接口的安全性。 常见措施 1&#xff09;防火墙 防火墙是网络安全中最基本的安全设备之一&#xff0c…...

IT运维专家给年轻人一些职业上的建议

运维工作在现代企业中是非常重要的一环,保证系统的稳定性、可用性以及安全性对企业的正常运营至关重要。以下是我给年轻人的一些职业发展建议,希望能够帮助你们在运维领域找到方向并取得成功。 1. 夯实基础,扎实技术功底 精通操作系统与网络:运维工作需要深入理解操作系统…...

ssc377d修改flash分区大小

1、flash的分区默认分配16M、 / # df -h Filesystem Size Used Available Use% Mounted on /dev/root 1.9M 1.9M 0 100% / /dev/mtdblock4 3.0M...

【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力

引言&#xff1a; 在人工智能快速发展的浪潮中&#xff0c;快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型&#xff08;LLM&#xff09;。该模型代表着该领域的重大突破&#xff0c;通过独特方式融合思考与非思考…...

【2025年】解决Burpsuite抓不到https包的问题

环境&#xff1a;windows11 burpsuite:2025.5 在抓取https网站时&#xff0c;burpsuite抓取不到https数据包&#xff0c;只显示&#xff1a; 解决该问题只需如下三个步骤&#xff1a; 1、浏览器中访问 http://burp 2、下载 CA certificate 证书 3、在设置--隐私与安全--…...

高危文件识别的常用算法:原理、应用与企业场景

高危文件识别的常用算法&#xff1a;原理、应用与企业场景 高危文件识别旨在检测可能导致安全威胁的文件&#xff0c;如包含恶意代码、敏感数据或欺诈内容的文档&#xff0c;在企业协同办公环境中&#xff08;如Teams、Google Workspace&#xff09;尤为重要。结合大模型技术&…...

【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)

🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...

Axios请求超时重发机制

Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式&#xff1a; 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...

什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南

文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/55aefaea8a9f477e86d065227851fe3d.pn…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

安卓基础(aar)

重新设置java21的环境&#xff0c;临时设置 $env:JAVA_HOME "D:\Android Studio\jbr" 查看当前环境变量 JAVA_HOME 的值 echo $env:JAVA_HOME 构建ARR文件 ./gradlew :private-lib:assembleRelease 目录是这样的&#xff1a; MyApp/ ├── app/ …...

Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信

文章目录 Linux C语言网络编程详细入门教程&#xff1a;如何一步步实现TCP服务端与客户端通信前言一、网络通信基础概念二、服务端与客户端的完整流程图解三、每一步的详细讲解和代码示例1. 创建Socket&#xff08;服务端和客户端都要&#xff09;2. 绑定本地地址和端口&#x…...