【踩坑日记】【教程】如何在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 登录。


相关推荐
旺仔Sec1 分钟前
2026年河北省职业院校技能大赛“网络系统管理”(高职组)网络构建样题
运维·服务器·网络
FF-Studio21 分钟前
Ubuntu 24.04 磁盘爆满“灵异“事件:Btrfs, Snapper 与删不掉的空间
linux·运维·人工智能·ubuntu
爱尔兰极光22 分钟前
计算机网络--网络层
运维·服务器·计算机网络
Neolnfra29 分钟前
Xshell SSH 连接故障排查
运维·服务器·网络·ssh·xshell·运程连接
极地星光34 分钟前
Ubuntu 16.10 启动时 networking.service 缓慢问题
linux·ubuntu
Roadinforest35 分钟前
如何使用 keyd 定制 Caps Lock:拯救你坏掉的 Left Control 键(Linux-Ubuntu)
linux·ubuntu
舞动青春8844 分钟前
Ubuntu安装QEMU过程及问题记录
linux·学习·ubuntu
知识分享小能手1 小时前
Ubuntu入门学习教程,从入门到精通,Ubuntu 22.04的基本配置 (3)
linux·学习·ubuntu
workflower1 小时前
小强地狱(Bug Hell)
大数据·bug·团队开发·需求分析·个人开发·结对编程
HIT_Weston2 小时前
68、【Ubuntu】【Hugo】搭建私人博客:方案分析(二)
linux·运维·ubuntu