为AWS Lightsail/EC2实例创建SSH密钥对无法按预期工作
AWS Lightsail/EC2实例创建SSH密钥对无法按预期工作
我太懂这种挫败感了!之前在AWS Lightsail和EC2上折腾新用户SSH登录的时候,也踩过一模一样的坑——常规本地生成密钥的方法好像突然就不管用了,AWS那堆写得稀里糊涂的指南更是越看越懵。
其实问题出在两个关键点上:一是新用户fred的家目录下没有配置好正确的authorized_keys文件和权限,二是AWS实例的SSH认证逻辑对权限要求特别严格。下面给你一套直接能用的解决步骤:
- 首先用默认用户(比如你的
ubuntu)正常登录到实例:ssh -i your-default-key.pem ubuntu@remotemachine.xyz - 切换到
fred用户的环境(如果还没给fred设置密码,用sudo su - fred更稳妥):sudo su - fred - 在
fred的家目录下创建.ssh文件夹,并设置严格的权限(这一步非常重要,权限不对SSH直接拒你):mkdir -p ~/.ssh chmod 700 ~/.ssh - 创建
authorized_keys文件,同样锁好权限:touch ~/.ssh/authorized_keys chmod 600 ~/.ssh/authorized_keys - 把你本地生成的
privatekeyforfred.pem对应的公钥内容(就是后缀为.pub的文件里的一串字符)粘贴到authorized_keys文件中。如果是在实例上给fred生成的密钥,就把~/.ssh/id_rsa.pub里的内容追加进去:cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys - 把实例上生成的私钥(如果是在实例上生成的)下载到本地,然后给本地的私钥设置正确权限:
chmod 400 privatekeyforfred.pem - 退出实例,现在尝试用fred用户登录:
ssh -i privatekeyforfred.pem fred@remotemachine.xyz
这里再提醒几个容易忽略的坑:
- 本地私钥的权限必须是
400,SSH会拒绝使用权限过于开放的私钥文件 - 服务器上
fred的.ssh文件夹权限必须是700,authorized_keys必须是600,哪怕多一点权限都可能导致认证失败 - 如果你想用AWS控制台创建的自定义密钥对登录fred,只需要把该密钥对的公钥内容添加到
fred的authorized_keys里就行,逻辑是一样的
备注:内容来源于stack exchange,提问作者Alistair Ross
相关产品推荐
相关产品推荐

