树莓派 Ubuntu 系统登录问题完整指南:解决 Permission denied (publickey)错误

树莓派 Ubuntu 系统登录问题完整指南:解决 Permission denied (publickey)错误

问题背景在树莓派上安装 Ubuntu Server 后,无论是尝试用 root 还是 ubuntu 用户登录,都可能遇到:

bash 复制代码
ssh root@192.168.200.55
root@192.168.200.55: Permission denied (publickey).

ssh ubuntu@192.168.200.55
ubuntu@192.168.200.55: Permission denied (publickey).

这是 Ubuntu Server 的默认安全机制,本文将全面解析原因并提供解决方案。


问题根源分析

1. Ubuntu Server 的默认用户机制

Ubuntu Server 镜像(特别是云版本)的特点:

  • 默认创建 ubuntu 用户(而非 root)

  • SSH 配置禁止密码登录 :

    bash 复制代码
    # /etc/ssh/sshd_config 默认设置
    PasswordAuthentication no
    PermitRootLogin prohibit-password
  • 需要 SSH 密钥:首次启动时,系统会注入云平台的公钥

2. 树莓派的特殊情况

如果您使用的是:

  • 官方 Ubuntu Server 镜像:通常需要首次启动时设置密码
  • 云镜像移植到树莓派:可能残留云平台的 SSH 密钥配置
  • 手动安装:可能未创建用户或未配置 SSH

3. 日志分析

查看树莓派日志(需通过控制台或已登录的用户):

bash 复制代码
sudo tail -f /var/log/auth.log

典型错误:

复制代码
Authentication failure for root from 192.168.200.33
Authentication failure for ubuntu from 192.168.200.33

解决方案(按推荐顺序)

方案一:使用控制台/物理访问(最可靠)

如果无法 SSH 登录,必须先通过其他方式访问树莓派:

方法 A:HDMI +键盘

直接连接显示器和键盘登录。

方法 B:SD 卡修改(无头模式)
bash 复制代码
# 在电脑上挂载 SD 卡的 boot 分区
# 创建空文件(启用 SSH):
touch ssh

# 创建用户数据文件:
echo "I2N1c2VyOiB1YnVudHU6CiAgICBwYXNzd29yZDogJHlvdXJfcGFzc3dvcmQKICAgIGxvY2tf cGFzc3dvcmQ6IGZhbHNlCg==" | base64 -d > user-data

方案二:启用密码认证(快速但需权衡安全)

适用场景:内网测试环境,有防火墙保护

步骤 1:通过控制台登录树莓派

使用上述方法登录(默认用户 ubuntu,首次登录会要求修改密码)。

步骤 2:修改 SSH 配置
bash 复制代码
sudo nano /etc/ssh/sshd_config

修改以下参数:

bash 复制代码
# 启用密码认证
PasswordAuthentication yes

# 允许 root 登录(如果需要)
PermitRootLogin yes
步骤 3:重启 SSH 服务
bash 复制代码
sudo systemctl restart ssh
sudo systemctl status ssh  # 确认服务正常
步骤 4:设置 root 密码(如需要)
bash 复制代码
sudo passwd root  # 设置 root 密码
sudo passwd ubuntu  # 确认 ubuntu 密码
步骤 5:从远程登录
bash 复制代码
ssh ubuntu@192.168.200.55  # 输入密码
# 或
ssh root@192.168.200.55    # 输入密码

方案三:配置 SSH 密钥(推荐长期使用)

如果已启用密码登录:

bash 复制代码
# 上传到 ubuntu 用户
ssh-copy-id ubuntu@192.168.200.55

# 上传到 root 用户(如需要)
ssh-copy-id root@192.168.200.55

如果无法密码登录(通过控制台执行):

bash 复制代码
# 在树莓派上
sudo mkdir -p /home/ubuntu/.ssh
sudo chmod 700 /home/ubuntu/.ssh

# 将本地公钥内容复制到树莓派
sudo nano /home/ubuntu/.ssh/authorized_keys
# 粘贴您的公钥(~/.ssh/id_ed25519.pub 内容)

sudo chmod 600 /home/ubuntu/.ssh/authorized_keys
sudo chown -R ubuntu:ubuntu /home/ubuntu/.ssh

# 对于 root(如需要)
sudo mkdir -p /root/.ssh
sudo chmod 700 /root/.ssh
sudo nano /root/.ssh/authorized_keys
# 粘贴公钥
sudo chmod 600 /root/.ssh/authorized_keys
步骤 4:测试登录
bash 复制代码
ssh ubuntu@192.168.200.55  # 无需密码
ssh root@192.168.200.55    # 无需密码(如配置)
步骤 5:恢复安全配置(重要)
bash 复制代码
sudo nano /etc/ssh/sshd_config

确保:

bash 复制代码
PasswordAuthentication no
PermitRootLogin prohibit-password  # 或 no

重启 SSH:

bash 复制代码
sudo systemctl restart sshd

方案四:Cloud-init 自动化配置

如果使用 cloud-init 配置树莓派:

yaml 复制代码
#cloud-config
hostname: rpi-ubuntu
manage_etc_hosts: true

# 创建用户并设置密码(可选)
users:
  - name: ubuntu groups: users,adm,dialout,audio,netdev,video,plugdev,cdrom,games,input,sudo
    shell: /bin/bash
    lock_passwd: false
    passwd: $6$...  # 使用 mkpasswd 生成
    sudo: ALL=(ALL) NOPASSWD:ALL - name: root
    lock_passwd: false    passwd: $6$...  # 仅在测试环境

#配置 SSH 允许密码(测试环境)
ssh_pwauth: true

# 禁用首次登录强制修改密码(可选)
chpasswd:
  expire: false

# 安装必要包
packages:
  - openssh-server
  - fail2ban

# 写入 SSH 配置
write_files:
  - path: /etc/ssh/sshd_config.d/90-cloud-init.conf
    content: |
      PasswordAuthentication yes
      PermitRootLogin yes
    permissions: '0644'

树莓派 Ubuntu特殊注意事项

1. 首次启动密码设置

Ubuntu Server 首次登录会强制修改密码:

bash 复制代码
# 首次通过控制台登录 ubuntu 用户
# 系统会要求立即修改密码

2. 网络配置

确保树莓派网络正常:

bash 复制代码
# 在树莓派上检查
ip a  # 查看 IP 地址
ping 8.8.8.8  # 测试外网

3. WiFi 配置(如使用)

如果使用 WiFi,配置:

bash 复制代码
sudo nano /etc/netplan/50-cloud-init.yaml

示例:

yaml 复制代码
network:
  version: 2
  wifis:
    wlan0:
      dhcp4: true
      access-points:
        "YourWiFiSSID":
          password: "YourWiFiPassword"

应用配置:

bash 复制代码
sudo netplan apply

相关推荐
叼烟扛炮16 分钟前
Linux 学习笔记(四十三):网络编程进阶——自定义协议解决 TCP 粘包与守护进程
linux·开发语言·网络·笔记·tcp/ip
Decay__21 分钟前
09_MySQL 闪回与时间点恢复 —— binlog 回放、mysqlbinlog、PITR 与误删恢复
运维·数据库·sql·mysql·架构
久曲健的测试窝23 分钟前
2026软件测试工具选型指南:双模式如何化解UI脚本维护难题
运维·人工智能·科技·aigc
Escalating_xu37 分钟前
【Linux 网络编程】DNS 与 ICMP:从域名解析到 ping、traceroute,把“网络通不通”问清楚
linux·网络·php
NailiConveyor2 小时前
柔性物流方案如何适配工厂升级?自动化输送流水线定制要点
大数据·运维·自动化·制造·业界资讯
Lsetea2 小时前
Certbot webroot申请SSL证书总是404:Nginx挑战目录与路径映射检查
运维·nginx·https·ssl证书·certbot
如若1232 小时前
Windows SSH + Headscale/Tailscale 组网及免密登录完整配置教程
运维·windows·ubuntu·ssh·内网穿透
开开心心就好2 小时前
音频降噪剪辑工具,音量裁剪一键处理
运维·服务器·前端·spring·ocr·音视频·1024程序员节
一枕槐安4873 小时前
大模型限流、重试、超时处理:API 调用健壮性方案
linux·服务器·php·大模型api·指数退避·限流控制·超时预算
西索斯coding3 小时前
gpt-image-2.5-sunburst 和 gemini-3.1-flash-image 差多少?60 组项目素材的成功成本评测框架
java·linux·gpt·ai