无法解决SSH Permission denied (publickey)错误,求助排查方案
解决GCP VM SSH Permission denied(publickey) 问题(Mac环境)
已完成的排查动作
- 使用
chmod和whoami确认.ssh目录及文件归属同一用户 - 通过
chmod和stat -f "%Lp" filename设置.ssh目录权限为700、密钥文件为600 - 确认配置和密钥文件位于
Users/[username]/.ssh路径下 - 尝试将
IdentitiesOnly和PubKeyAuthentication设为"yes" - 确保私钥文件在本地、公钥文件在服务器端
遗漏排查点及解决方案
1. 检查GCP VM的SSH密钥元数据
- 登录GCP控制台,进入对应VM实例的元数据页面,切换到SSH密钥标签
- 确认公钥格式为
ssh-rsa AAAAB3NzaC1yc2E... username@hostname,末尾的用户名需与VM内系统用户名匹配,且公钥内容完整无截断 - 若未添加,直接粘贴本地
~/.ssh/id_rsa.pub(或自定义公钥文件)的内容,保存后重启VM重试
2. 验证密钥对的匹配性
- 本地执行
ssh-keygen -lf ~/.ssh/your_private_key获取私钥指纹 - 服务器端执行
ssh-keygen -lf ~/.ssh/authorized_keys获取公钥指纹 - 对比两者指纹是否完全一致,若不匹配需重新生成密钥对并上传公钥到服务器
3. 检查服务器端authorized_keys权限与归属
- 服务器端执行:
ls -ld ~/.ssh ls -l ~/.ssh/authorized_keys - 确保
authorized_keys权限为600,所属用户/组与VM登录用户一致,若异常执行:chmod 600 ~/.ssh/authorized_keys chown your_vm_username:your_vm_username ~/.ssh/authorized_keys
4. 显式指定连接密钥
- 命令行连接时明确指定密钥:
ssh -i ~/.ssh/your_private_key your_vm_username@vm_external_ip - VSCode中,在
~/.ssh/config里添加明确配置:Host gcp-vm HostName vm_external_ip User your_vm_username IdentityFile ~/.ssh/your_private_key IdentitiesOnly yes PubKeyAuthentication yes
5. 检查服务器端SSH服务配置
- 编辑
/etc/ssh/sshd_config,确保以下配置正确:PubkeyAuthentication yes AuthorizedKeysFile .ssh/authorized_keys .ssh/authorized_keys2 PermitRootLogin no # 若使用root登录需改为yes,不推荐 PasswordAuthentication no # 可临时改为yes测试密码登录是否正常 - 修改后重启SSH服务:
sudo systemctl restart sshd
6. 检查Mac本地ssh-agent状态
- 执行
ssh-add -l查看已加载的密钥,若未加载目标私钥,执行:eval "$(ssh-agent -s)" ssh-add ~/.ssh/your_private_key
7. 解析服务器端auth.log详细错误
- 服务器端实时查看日志:
sudo tail -f /var/log/auth.log - 同时发起SSH连接,根据日志中的具体错误(如
invalid key、user not found)定位问题
内容的提问来源于stack exchange,提问作者The Blind Hawk
相关产品推荐
相关产品推荐

