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

前言

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


环境说明

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

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

1. 在本地生成 SSH 密钥对

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

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

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

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

2. 将公钥上传到服务器

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

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

    bash 复制代码
    type C:\Users\<你的用户名>\.ssh\id_rsa.pub

    复制输出内容。

  2. 登录到服务器:

    bash 复制代码
    ssh username@server_ip

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

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

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

    bash 复制代码
    nano ~/.ssh/authorized_keys

    粘贴后保存并退出。

  5. 设置文件权限:

    bash 复制代码
    chmod 600 ~/.ssh/authorized_keys

3. 测试 SSH 公钥登录

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

bash 复制代码
ssh -i C:\Users\<你的用户名>\.ssh\id_rsa username@server_ip

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


二、遇到的 Bug 和解决过程

问题描述

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

plaintext 复制代码
Failed password for hw from 192.168.0.100 port 54545 ssh2

排查与解决过程

  1. 检查 SSH 服务配置

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

    plaintext 复制代码
    PubkeyAuthentication yes
    AuthorizedKeysFile .ssh/authorized_keys
    PasswordAuthentication yes    # 用于调试时保留

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

    bash 复制代码
    sudo systemctl restart ssh
  2. 检查 authorized_keys 文件权限

    确保 ~/.ssh 文件夹和 authorized_keys 文件的权限正确:

    bash 复制代码
    chmod 700 ~/.ssh
    chmod 600 ~/.ssh/authorized_keys
  3. 检查文件所有者

    问题的根本原因是:authorized_keys 文件的所有者不正确。通过以下命令发现文件归属不是登录的用户:

    bash 复制代码
    ls -l ~/.ssh/authorized_keys

    修复所有权问题:

    bash 复制代码
    chown username:username ~/.ssh/authorized_keys

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


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

1. 如何避免安全警告

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

plaintext 复制代码
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 会话:

bash 复制代码
who

或者:

bash 复制代码
w

例如,输出如下:

plaintext 复制代码
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 登录。


相关推荐
运维行者_3 分钟前
通过OpManager的Windows服务监控能力释放最佳IT网络性能
服务器·开发语言·网络·windows·web安全·php
.千余6 分钟前
【Linux】进程概念
linux·服务器·开发语言·学习
爱学习的小囧9 分钟前
ESXi性能历史怎么监控?2种方法,图形化+命令行全覆盖
java·linux·运维·服务器·网络·esxi·esxi8.0
xiaoshuaishuai840 分钟前
C# Submodule 避坑指南
服务器·数据库·windows·c#
小草儿7991 小时前
gbase8s之onatpe备份与恢复性能测试
linux·服务器·网络
郝学胜-神的一滴1 小时前
Linux 高并发基石:epoll 核心原理 + LT/ET 触发模式深度剖析
linux·运维·服务器·开发语言·c++·网络协议
‎ദ്ദിᵔ.˛.ᵔ₎1 小时前
Linux 启动
linux·运维·服务器
shy^-^cky1 小时前
服务器高可用(HA)架构对比
运维·服务器·架构·双机热备·双机互备·双机双工
一颗青果1 小时前
Cookie 与 Session 超详细讲解
服务器·前端·github
威迪斯特2 小时前
Ubuntu的apt命令详解:系统管理的核心工具
运维·服务器·ubuntu·apt·下载·包管理·维护