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


    作者:__Witheart__

    物联沃分享整理
    物联沃-IOTWORD物联网 » 【踩坑日记】【教程】如何在ubuntu服务器上配置公钥登录以及bug解决

    发表回复