sublime sftp 连不上私钥服务器,90% 是 private_key_path 格式或路径错误:windows 必须用 puttygen 转为 .ppk 格式并用正斜杠路径;linux/macos 需用 sftp-next 插件配合 sftp_flags;password 字段与密钥互斥,需彻底删除而非注释;上传仅对映射项目生效,且服务端 ssh 配置、权限、防火墙均需合规。

Sublime SFTP 连不上私钥服务器,90% 是 private_key_path 格式或路径错了
原生 OpenSSH 私钥(如 id_rsa)在 ST3/ST4 的 SFTP 插件中**默认不被直接支持**——尤其是 Windows 下,插件底层依赖 Paramiko 或旧版 SSH 库,对密钥格式敏感。你看到 Authentication failed 却没报具体原因,大概率卡在这儿。
常见错误现象:
- 填了
private_key_path,但保存后右键 Sync 仍弹密码框 - 配置里写
C:\Users\Me\.ssh\id_rsa,实际路径没错,却静默失败 - Linux/macOS 下 chmod 正确、路径绝对,但依然 Permission denied
实操建议:
- Windows 用户必须把
id_rsa转成.ppk格式:用PuTTYgen打开私钥 → Load → Save private key(不选“Save public key”)→ 得到id_rsa.ppk -
private_key_path字段只认.ppk(ST3/ST4 均如此),不能写id_rsa或id_rsa.pub - 路径用正斜杠:写成
C:/Users/Me/.ssh/id_rsa.ppk,别用反斜杠\,否则 JSON 解析失败 - Linux/macOS 用户若坚持用 OpenSSH 私钥,需确认插件版本:ST4 必须用
SFTP-Next,且配置中改用sftp_flags启动参数,例如:"sftp_flags": ["-i", "/home/me/.ssh/id_rsa"]
为什么 password 和 private_key_path 不能共存
插件解析配置时,一旦发现 password 字段非空,就会强制走密码认证流程,完全忽略 private_key_path。这不是 bug,是设计逻辑——二者互斥。
典型表现:
- 配置里留着
"password": "xxx"(哪怕值为空字符串""),密钥登录就失效 - 删掉整行
password字段,而不是注释掉它(JSON 不支持注释,注释会导致解析失败) - 检查
sftp-config.json是否有多余逗号,尤其在password行末尾——JSON 语法错误会让整个配置静默失效
upload_on_save 开了却不同步?先确认你真在“项目”里
这个开关只对“已映射的项目根目录下的文件”生效。如果你只是双击打开一个 .js 文件,哪怕旁边有 sftp-config.json,也不会触发上传。
必须满足三个条件:
- 通过
Project → Add Folder to Project把本地文件夹加进侧边栏(顶层显示为文件夹图标) - 右键该文件夹 →
SFTP/FTP → Map to Remote(不是“Setup Server”,后者不生成有效绑定) -
sftp-config.json真正在该文件夹根目录下,且文件名全小写、无空格、无扩展名拼写错误(比如SFTP-config.json或sftp-config.json少个结尾换行都会失效)
服务器端 SSH 配置常被忽略的硬性限制
即使 Sublime 配置全对,Connection refused 或 Connection timeout 多半是服务端拦住了。别急着调 Sublime 设置。
重点检查:
-
/etc/ssh/sshd_config中是否开启PubkeyAuthentication yes(不是注释状态) -
AuthorizedKeysFile路径是否匹配你放id_rsa.pub的位置(默认~/.ssh/authorized_keys) -
~/.ssh目录权限必须是700,authorized_keys必须是600,否则 OpenSSH 拒绝读取 - 防火墙是否放行了你配的
port(别假设一定是 22;如果配了"port": 2222,服务器 iptables 或 ufw 也得开 2222)
最易被跳过的点:私钥文件本身权限。Linux/macOS 下,id_rsa 或 id_rsa.ppk 如果权限太宽(比如 644),SFTP 插件会拒绝加载——但它不报错,只 fallback 到密码流程。











