navicat在linux报“rsa public key not found”或连接中断,主因是openssh对ssh密钥路径权限的严格校验:~/.ssh目录须700、私钥文件须600,且父目录至根目录均不可有组/其他写权限,否则静默拒绝。
navicat 在 linux 上报 “rsa public key not found” 或连接直接中断,八成不是密钥内容错了,而是文件权限或路径权限不合规 —— openssh 拒绝加载,连日志都不留。
为什么 chmod 600 ~/.ssh/id_rsa 还是不行?
因为 OpenSSH 对 ~/.ssh 目录和其中所有关键文件的权限有硬性要求,且检查顺序严格:
-
~/.ssh目录必须是700(即drwx------),不能是755或777 -
~/.ssh/id_rsa必须是600(-rw-------),哪怕只多一个组可读位(如640)也会被拒绝 -
~/.ssh/id_rsa.pub可以是644,但 Navicat 实际只读私钥,公钥文件缺失或权限错通常不影响连接 - 如果私钥文件不在用户主目录下(比如放在
/opt/navicat/keys/),那该路径的父目录(直到根目录)都不能有“组写”或“其他写”权限 —— OpenSSH 会逐级检查
Navicat 启动时找不到私钥的典型表现
不是弹窗报错,而是静默失败:测试连接卡住几秒后直接提示 RSA public key not found,或者日志里出现 Authentication refused: bad ownership or modes。注意,这个错误来自 OpenSSH 服务端,说明 Navicat 已把私钥传过去,但服务端因权限问题直接拒收。
- 用命令行验证最准:
ssh -i ~/.ssh/id_rsa user@host—— 如果也失败,说明不是 Navicat 的锅 - Navicat 自带的 SSH 测试不校验路径是否存在,只尝试加载;若路径错(比如填了
~/keys/id_rsa但实际没展开波浪号),它会静默跳过 - Linux 下 Navicat 默认以当前 GUI 用户身份运行,不会自动继承终端的
$HOME,所以不要依赖~,务必填绝对路径,如/home/yourname/.ssh/id_rsa
修复步骤:从本地到远程全链路检查
别只改私钥权限,要闭环验证:
宝塔Linux面板11.8.1为官网当前正式版,新增AI建站能力并经过宝塔网站工程师深度调教,开放自定义AI功能API,同时对WAF进行界面重构和深度优化,提升拦截能力与运维效率。
- 在 Navicat 的 SSH 配置中,私钥路径填**绝对路径**,确认文件存在:
ls -l /home/yourname/.ssh/id_rsa - 执行:
chmod 700 ~/.ssh && chmod 600 ~/.ssh/id_rsa(公钥不用动) - 检查远程服务器上
~/.ssh/authorized_keys权限是否为600,目录~/.ssh是否为700;否则sshd不读它 - 确认远程
/etc/ssh/sshd_config中PubkeyAuthentication yes且未被注释 - 重启远程 sshd:
sudo systemctl restart sshd(CentOS/RHEL 7+ 或 Ubuntu 16.04+)
容易被忽略的深层陷阱
权限修复后仍失败?重点查这三处:
-
/home/yourname目录权限不能是777或775—— OpenSSH 要求用户主目录不能被组或其他人写入,否则整个~/.ssh被无视 - SELinux 启用时(常见于 CentOS/RHEL),即使权限全对,也可能拦截:
sudo setenforce 0临时测试,若恢复连接,需调整策略而非关 SELinux - 飞牛 NAS、群晖等定制系统可能把
/root/.ssh生成在非标准位置,且属主是nashelper进程(UID 999),此时chown root:root /root/.ssh /root/.ssh/authorized_keys才有效
权限问题从来不是“改完就完”,而是层层校验。OpenSSH 的拒绝没有中间态 —— 要么全通,要么全拒,连 debug 日志都吝啬。动手前先用 ssh -v -i ... 看握手哪一步断的,比盲调快十倍。










