能直接免密连上树莓派的关键在于本地ssh配置与树莓派端公钥认证生效:需用ed25519算法生成密钥、正确配置~/.ssh/config、严格设置authorized_keys权限为600且属主为pi、确保sshd开启pubkeyauthentication并禁用密码登录。

能直接免密连上树莓派,关键不在 VSCode 插件本身,而在本地 SSH 配置和树莓派端的公钥认证是否真正生效。 Remote-SSH 插件只是调用系统 ssh 命令,它不会帮你生成密钥、改权限或开服务——这些必须手动做对,否则插件再好也卡在密码提示里。
ssh-keygen 生成密钥时选什么算法?
别用默认的 rsa(除非老系统兼容性要求高)。优先执行:
ssh-keygen -t ed25519 -C "pi@raspberrypi" -f ~/.ssh/id_ed25519
原因很实在:ed25519 更快、更短、更安全,且现代树莓派 OS(Raspberry Pi OS Bullseye+、Ubuntu 22.04+)默认支持。如果生成后连接报 no mutual signature algorithm,说明树莓派端 sshd 太旧,需升级或退回 -t rsa -b 4096。
-
-C后的注释建议写成用户名@主机名,方便多密钥管理 - 私钥文件名不要带空格或特殊字符,
id_ed25519是最稳妥的命名 - 生成时不设 passphrase(直接回车),否则每次连接仍要输密码
~/.ssh/config 里哪些字段不能少?
VSCode 的 Remote-SSH 依赖这个配置文件识别连接参数。一个最小可用配置如下:
Host raspberrypi HostName 192.168.1.100 User pi IdentityFile ~/.ssh/id_ed25519 Compression yes ServerAliveInterval 60
注意几个硬性要求:
-
HostName必须是 IP 或可解析的域名,不能是主机名(如raspberrypi.local在某些网络下不稳定) -
IdentityFile必须用绝对路径,Windows 用户写成C:\Users\name\.ssh\id_ed25519,且路径中不能有中文或空格 - 删掉
ForwardX11相关项——X11 转发不是免密前提,加了反而可能因 Xming 未运行导致连接延迟或失败 - 不要在配置里写
PasswordAuthentication no,那是服务端配置,客户端不认
树莓派端 authorized_keys 权限为什么总被拒绝?
这是最常踩的坑:SSH 服务对权限极其敏感,只要错一个数字就退回到密码登录。
在树莓派上执行以下三步,缺一不可:
- 确保
~/.ssh目录权限是700:chmod 700 ~/.ssh - 确保
~/.ssh/authorized_keys权限是600:chmod 600 ~/.ssh/authorized_keys - 确认文件所有者是登录用户(比如
pi),不是root:ls -l ~/.ssh/authorized_keys看输出第一列
如果用 ssh-copy-id 失败,手动复制更可靠:
cat ~/.ssh/id_ed25519.pub | ssh pi@192.168.1.100 "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
然后立刻在树莓派上检查 /etc/ssh/sshd_config 是否含这两行且未被注释:
PubkeyAuthentication yes PasswordAuthentication no
改完必须重启服务:sudo systemctl restart ssh。
VSCode 连接时还弹密码框?先查这三件事
Remote-SSH 插件显示“正在连接…”但卡住,或弹出密码输入框,大概率不是插件问题:
- 本地终端执行
ssh raspberrypi,看是否免密——如果终端也弹密码,说明 SSH 层没通,不用折腾 VSCode - 检查 VSCode 左下角状态栏是否显示当前连接目标;如果显示的是
localhost或其他 host,说明你点错了配置项 - 打开 VSCode 的 Remote-SSH 日志(命令面板 →
Remote-SSH: Show Log),搜索identity file和Permission denied,能快速定位是密钥路径错还是权限错
真实情况往往是:本地密钥生成了、config 写对了、树莓派 authorized_keys 也贴上了,但忘了 chmod 600——这个数字权限差一点,SSH 就直接无视整条公钥。别跳过验证步骤,哪怕只多敲一行 ls -l ~/.ssh。











