You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WSL中无法修改EC2密钥.pem文件权限导致SSH连接失败的问题咨询

WSL中无法修改EC2密钥.pem文件权限导致SSH连接失败的问题咨询

你好!作为经常折腾WSL和EC2的开发者,我完全懂你这种跨系统权限踩坑的痛苦,咱们一步步来解决这个问题:

首先先给你明确两个核心问题:

  1. Windows文件权限确实会直接映射到WSL的权限——如果你的pem文件是存放在Windows的磁盘(比如C:/、D:/)里,WSL只是通过挂载的方式访问这些文件,底层权限还是Windows在管控,这就是为什么你用chmod、chown甚至root操作都报错的原因。
  2. SSH要求密钥文件的权限必须是600(也就是只有自己能读写),权限太松或者太严都会导致连接失败,这也是AWS提示你“文件权限太开放”的原因。

接下来给你几个优先级从高到低的解决方案:

方案一:把密钥移到WSL原生文件系统(最推荐)

WSL自己的文件系统(比如/home/你的用户名/下的目录)不受Windows权限管控,操作起来最顺畅:

  • 打开WSL终端,先创建标准的密钥存放目录:mkdir -p ~/.ssh
  • 把Windows里的pem文件复制过来,假设你的pem在Windows的D:\dev\keys\ec2key1.pem,那么在WSL里执行:cp /mnt/d/dev/keys/ec2key1.pem ~/.ssh/
  • 现在就可以正常修改权限了,执行SSH要求的600权限:chmod 600 ~/.ssh/ec2key1.pem
  • 执行ls -l ~/.ssh/ec2key1.pem确认,输出应该是-rw-------开头,这就对了
  • 之后用这个密钥连接EC2:ssh -i ~/.ssh/ec2key1.pem 你的用户名@EC2公网IP(注意:不同系统的用户名不一样,Amazon Linux是ec2-user,Ubuntu是ubuntu,CentOS是centos)

方案二:修改WSL挂载配置(不用移动文件)

如果你不想移动文件,可以调整WSL的挂载参数,让Windows磁盘里的文件能被WSL修改权限:

  • 在WSL里编辑(或新建)/etc/wsl.conf文件:sudo nano /etc/wsl.conf
  • 粘贴以下内容:
[automount]
enabled = true
options = "metadata,umask=0022"
mountFsTab = false
  • 按Ctrl+O保存,Ctrl+X退出编辑器
  • 关闭所有WSL窗口,然后在Windows的命令提示符里执行wsl --shutdown重启WSL
  • 重新打开WSL后,你就可以对Windows里的pem文件执行chmod 600修改权限了

方案三:给EC2实例绑定新密钥(最稳妥的兜底方案)

如果上面的方法都走不通,或者担心前同事的密钥有安全隐患(毕竟他已经离职了),最稳妥的办法是生成新的密钥对绑定到EC2:

  1. 登录AWS控制台,创建一个新的密钥对,下载对应的pem文件到你的电脑
  2. 按照方案一的步骤把新pem放到WSL原生目录并设置600权限
  3. 给EC2实例替换密钥:
    • 如果你能通过其他方式(比如AWS SSM会话管理器)登录实例,可以直接编辑~/.ssh/authorized_keys文件,添加新密钥的公钥内容(公钥可以通过ssh-keygen -y -f 新pem文件路径生成)
    • 如果无法登录,就需要停止EC2实例,把它的根磁盘挂载到另一个临时EC2实例上,修改临时实例里挂载磁盘的authorized_keys文件,再把磁盘挂回原实例启动

关于前同事机器的ACL操作

其实完全没必要折腾前同事的机器,就算你在他的机器上改了ACL,复制到你的电脑后,Windows还是会根据你的用户权限重新设置文件权限,反而多此一举,不如直接用上面的方案解决。

最后再提醒你:除了密钥权限,EC2的安全组必须开放22端口给你的IP,而且连接时的用户名要正确,这些也可能导致“Permission denied”的错误,排查的时候别漏了!

备注:内容来源于stack exchange,提问作者hnewbie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.23 15:12:45