运维,ubuntu,树莓派··约 9 分钟读完

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

树莓派安装Ubuntu Server后常见SSH登录失败问题(Permission denied (publickey))的解决方案。主要原因是Ubuntu默认禁用密码登录且要求SSH密钥认证。提供四种解决方案:1)通过控制台或SD卡修改启用SSH;2)临时启用密码认证;3)配置SSH密钥(推荐);4)使用Cloud-init自动化配置。特别说明首次启动需修改密码和网络配置注意事项。强调最终应恢复禁用密码登录的安全配置。
linux运维ubuntu

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

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

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 配置禁止密码登录# /etc/ssh/sshd_config 默认设置 PasswordAuthentication no PermitRootLogin prohibit-password
  • 需要 SSH 密钥:首次启动时,系统会注入云平台的公钥

2. 树莓派的特殊情况

如果您使用的是:

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

3. 日志分析

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

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 卡修改(无头模式)

# 在电脑上挂载 SD 卡的 boot 分区 # 创建空文件(启用 SSH): touch ssh # 创建用户数据文件: echo "I2N1c2VyOiB1YnVudHU6CiAgICBwYXNzd29yZDogJHlvdXJfcGFzc3dvcmQKICAgIGxvY2tf cGFzc3dvcmQ6IGZhbHNlCg==" | base64 -d > user-data

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

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

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

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

步骤 2:修改 SSH 配置

sudo nano /etc/ssh/sshd_config

修改以下参数:

# 启用密码认证 PasswordAuthentication yes # 允许 root 登录(如果需要) PermitRootLogin yes

步骤 3:重启 SSH 服务

sudo systemctl restart ssh sudo systemctl status ssh # 确认服务正常

步骤 4:设置 root 密码(如需要)

sudo passwd root # 设置 root 密码 sudo passwd ubuntu # 确认 ubuntu 密码

步骤 5:从远程登录

ssh ubuntu@192.168.200.55 # 输入密码 # 或 ssh root@192.168.200.55 # 输入密码

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

如果已启用密码登录

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

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

# 在树莓派上 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:测试登录

ssh ubuntu@192.168.200.55 # 无需密码 ssh root@192.168.200.55 # 无需密码(如配置)

步骤 5:恢复安全配置(重要)

sudo nano /etc/ssh/sshd_config

确保:

PasswordAuthentication no PermitRootLogin prohibit-password # 或 no

重启 SSH:

sudo systemctl restart sshd

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

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

#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 首次登录会强制修改密码:

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

2. 网络配置

确保树莓派网络正常:

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

3. WiFi 配置(如使用)

如果使用 WiFi,配置:

sudo nano /etc/netplan/50-cloud-init.yaml

示例:

network: version: 2 wifis: wlan0: dhcp4: true access-points: "YourWiFiSSID": password: "YourWiFiPassword"

应用配置:

sudo netplan apply