【踩坑日记】【教程】如何在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:手动复制公钥
-
查看本地公钥内容:
type C:\Users\<你的用户名>\.ssh\id_rsa.pub
复制输出内容。
-
登录到服务器:
ssh username@server_ip
替换
username
和server_ip
为你的服务器用户名和 IP 地址。 -
在服务器上创建
.ssh
文件夹并设置权限:mkdir -p ~/.ssh chmod 700 ~/.ssh
-
编辑或创建
authorized_keys
文件,将公钥内容粘贴进去:nano ~/.ssh/authorized_keys
粘贴后保存并退出。
-
设置文件权限:
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
排查与解决过程
-
检查 SSH 服务配置
编辑服务器上的/etc/ssh/sshd_config
文件,确保以下配置项正确:PubkeyAuthentication yes AuthorizedKeysFile .ssh/authorized_keys PasswordAuthentication yes # 用于调试时保留
修改完成后,重启 SSH 服务:
sudo systemctl restart ssh
-
检查
authorized_keys
文件权限
确保~/.ssh
文件夹和authorized_keys
文件的权限正确:chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys
-
检查文件所有者
问题的根本原因是: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.100
和 192.168.0.101
登录。
相关文章:
【踩坑日记】【教程】如何在ubuntu服务器上配置公钥登录以及bug解决
前言 在日常开发和运维中,为了提高服务器登录的安全性,我们通常会选择使用 SSH 密钥认证 来替代传统的密码登录。然而,在配置 SSH 公钥登录的过程中,可能会遇到各种坑和 Bug。本文将从零开始,手把手教你如何在 Ubuntu…...
insmod一个ko提供基础函数供后insmod的ko使用的方法
一、背景 在内核模块开发时,多个不同的内核模块,有时候可能需要都共用一些公共的函数,比如申请一些平台性的公共资源。但是,这些公共的函数又不方便去加入到内核镜像里,这时候就需要把这些各个内核模块需要用到的一些…...
七、传统循环神经网络(RNN)
传统循环神经网络 RNN 前言一、RNN 是什么?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学算法,本系列博客仅做个人记录,建议大家都去看carl本人的博客,写的真的很好的! 代码随想录 LeetCode:19.删除链表倒数第N个节点 给你一个链表,删除链表的倒数第 n 个结点,并且返回链表…...
【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. 外部中断
更多单片机学习笔记:单片机学习笔记 1. 点亮一个LED灯单片机学习笔记 2. LED灯闪烁单片机学习笔记 3. LED灯流水灯单片机学习笔记 4. 蜂鸣器滴~滴~滴~单片机学习笔记 5. 数码管静态显示单片机学习笔记 6. 数码管动态显示单片机学习笔记 7. 独立键盘单片机学习笔记 8…...
基于stm32的智能教室管理系统/智能家居系统
基于stm32的智能教室管理系统/智能家居系统 持续更新,欢迎关注!!! ** 基于stm32的智能教室管理系统/智能家居系统 ** 目前,物联网已广泛应用在我们的生活中。智慧校园是将校园中的生活、学习、工作等相关的资源联系在一起,实现管理的智能化…...
基于 Qt 和 GStreamer 的环境中构建播放器
一、功能与需求分析 功能描述 播放本地视频文件(如 MP4、MKV)。 支持基本控制功能(播放、暂停、停止、跳转)。 提供音量调节功能。 在 Windows 环境下使用 Visual Studio 2022 编译。 技术选型 Qt:用于构建用户界面。 GStreamer:负责视频解码和播放。 Visual Studio 202…...
windows docker 入门
这个教程将指导你如何安装Docker、运行第一个容器以及理解一些基本概念。 第一步:安装Docker Desktop for Windows 系统要求: Windows 10 64位版本(专业版、企业版或教育版)。启用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 解决方法: <dependency><groupId>com.baomidou</groupId><artifactId>dynamic-datasource-spring…...
深度学习中的正则化模型是什么意思?
一、定义 在深度学习中,正则化是一种用于防止过拟合的技术。过拟合是指模型在训练数据上表现非常好,但在新的、未见过的数据(测试数据)上表现很差的情况。正则化模型就是通过在损失函数中添加额外的项来约束模型的复杂度…...
修改IDEA配置导致Spring Boot项目读取application.properties中文乱码问题
之前很多配置都是放在nacos里面,然后这次同事有个配置写在application.properties中,这个配置含有中文,启动之后发现拿到的中文值会乱码,然后就帮忙看了一下问题。 排查问题 经过不停的百度、排查发现,spring读取app…...
Flink 热存储维表 使用 Guava Cache 减轻访问压力
目录 背景 Guava Cache 简介 实现方案 1. 项目依赖 2. Guava Cache 集成到 Flink (1) 定义 Cache (2) 使用 Cache 优化维表查询 3. 应用运行效果 (1) 维表查询逻辑优化 (2) 减少存储压力 Guava Cache 配置优化 总结 背景 在实时计算场景中,Flink 应用中…...
深入探索SenseVoiceSmall:高效多语言语音识别与处理模型
引言 随着人工智能技术的飞速发展,语音识别技术已经广泛应用于智能助手、客户服务、智能家居等多个领域。然而,现有的语音识别模型往往存在资源消耗大、多语言支持不足等问题。今天,我们要介绍的是来自ModelScope平台的SenseVoiceSmall模型&…...
Flink--API 之Transformation-转换算子的使用解析
目录 一、常用转换算子详解 (一)map 算子 (二)flatMap 算子 (三)filter 算子 (四)keyBy 算子 元组类型 POJO (五)reduce 算子 二、合并与连接操作 …...
每日十题八股-2024年11月27日
1.类型互转会出现什么问题吗? 2.为什么用bigDecimal 不用double ? 3.装箱和拆箱是什么? 4.Java为什么要有Integer? 5.Integer相比int有什么优点? 6.那为什么还要保留int类型? 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 安全措施包括:防火墙、验证码、鉴权、IP限制、数据加密、限流、监控、网关等,以确保接口的安全性。 常见措施 1)防火墙 防火墙是网络安全中最基本的安全设备之一,…...
IT运维专家给年轻人一些职业上的建议
运维工作在现代企业中是非常重要的一环,保证系统的稳定性、可用性以及安全性对企业的正常运营至关重要。以下是我给年轻人的一些职业发展建议,希望能够帮助你们在运维领域找到方向并取得成功。 1. 夯实基础,扎实技术功底 精通操作系统与网络:运维工作需要深入理解操作系统…...
Django基础之路由
一.前言 前面我们说了django的安装于基础配置,基础知识点我就细分下来,每天和大家讲一点,今天就要和大家说django的基础知识点了,我们今天先来讲路由,内容不多,希望大家记住 二.传统路由 路由就是前面一个…...
Python实例化中默认值的行为及应用
Python实例化中默认值的行为及应用 适合初学者阅读 本文要点 使用可变对象作为默认参数会导致所有实例共享同一对象,引发意外的数据修改。不可变对象作为默认参数时,每次实例化都会创建新的对象,不会共享数据。推荐使用None作为默认值&…...
【WRF后处理】WRF模拟效果评价及可视化:MB、RMSE、IOA、R
【WRF后处理】模拟效果评价及可视化 准备工作模型评价指标Python实现代码Python处理代码:导入站点及WRF模拟结果可视化图形及评价指标参考在气象和环境建模中(如使用 WRF 模型进行模拟),模型性能评价指标是用于定量评估模拟值与观测值之间偏差和拟合程度的重要工具。 本博客…...
ShenNiusModularity项目源码学习(4:身份认证)
ShenNiusModularity项目有两套启动方式,一种是ShenNius.Admin.Mvc项目启动,该项目为MVC模式,带前台页面,也有后台服务,另一种是ShenNius.Admin.Hosting,该项目启动后仅提供后台服务,供其它前台项…...
python+django自动化部署日志采用WebSocket前端实时展示
一、开发环境搭建和配置 # channels是一个用于在Django中实现WebSocket、HTTP/2和其他异步协议的库。 pip install channels#channels-redis是一个用于在Django Channels中使用Redis作为后台存储的库。它可以用于处理#WebSocket连接的持久化和消息传递。 pip install channels…...
flink学习(6)——自定义source和kafka
概述 SourceFunction:非并行数据源(并行度只能1) --接口 RichSourceFunction:多功能非并行数据源(并行度只能1) --类 ParallelSourceFunction:并行数据源(并行度能够>1) --接口 RichParallelSourceFunction:多功能并行数据源(并行度能够>1) --类 【建议使用的】 ——…...
开发常见问题及解决
1.DBeaver 报Public Key Retrieval is not allowed 在使用DBeaver连接数据库时出现“Public Key Retrieval is not allowed”错误,主要是因为数据库连接配置的安全策略导致的。以下是详细的解释和解决方法: 错误原因 这个错误通常出现在连接MySQL数据…...
python excel接口自动化测试框架!
今天采用Excel继续写一个接口自动化测试框架。 设计流程图 这张图是我的excel接口测试框架的一些设计思路。 首先读取excel文件,得到测试信息,然后通过封装的requests方法,用unittest进行测试。 其中,接口关联的参数通过正则进…...
mybatis:You have an error in your SQL syntax;
完整报错You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near false, false, false, false, false, false, false, false, false, false, false, at line 1 SQL: INSERT INTO user …...
使用 Maven 开发 IntelliJ IDEA 插件
使用 Maven 开发 IntelliJ IDEA 插件的完整流程 1. 创建 Maven 项目 1.1 使用 IntelliJ 创建 Maven 项目 打开 IntelliJ IDEA,点击 File > New > Project。选择 Maven,填写项目名称和 GroupId,例如: GroupId: com.exampl…...
永久免费素材网站/新app推广去哪里找
刚刚接触SpringBoot,说说踩过的坑,主要的还是要记录下来,供以后反省反省! 今天主要讲讲 thymeleafsecurity 的搭建,SpringBoot的项目搭建应该比较简单,这里就不多说了。可以去网上找到很多。 一:…...
自己如何做简单网站/seo关键词优化的技巧
Linux系统查看文件内容的特殊方法:最基本的有cat和less,more,如果有特殊的要求的话。1/如果只想看文件的前5行,可以使用head命令,如:head -5 /etc/passwd2/如果想查看文件的后10行,可以使用tail命令&#x…...
做中国旅游网站的目的与必要性/网络营销广告策划
我们在做Android项目开发过程中,经常会遇到这种情况,我们需要引入的aar、jar等所依赖的第三方依赖库与我们本地的依赖库的版本号不一致,造成我们项目编译失败,遇到这种情况时,我们只需要在module下的build.gradle文件中…...
wordpress极致性能/快速排名生客seo
关于列表HTML代码里面有三种列表,也是很常用三种列表,分别是:有序列表、无序列表、自定义列表,这三种列表在网站上面是经常看到的,也是一个基础知识。有序列表的 写法有序列表的写法有序列表1有序列表2有序列表3无序列…...
门户网站html/青岛百度代理公司
转载于:https://www.cnblogs.com/MWCloud/p/11212942.html...
免费个人网站制作在线/谷歌关键词分析工具
1.为驳回编译器自动生成函数的技能,可把这些函数的声明放入private,如果是继承类型可把base class的这些函数声明private,可在编译期间得到警告转载于:https://www.cnblogs.com/xuaidongstdudyrecording/p/7259169.html...