我在 Amazon EC2 上创建了一个新的 linux 实例,并在其中下载了 .pem
文件以允许我通过 SSH 登录。
当我尝试使用 ssh
时:
ssh -i myfile.pem <public dns>
我有:
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: UNPROTECTED PRIVATE KEY FILE! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0644 for 'amazonec2.pem' are too open.
It is recommended that your private key files are NOT accessible by others.
This private key will be ignored.
bad permissions: ignore key: amazonec2.pem
Permission denied (publickey).
在 this post 之后,我尝试 chmod +600
.pem
文件,但现在当我 ssh
时,我得到了
Permission denied (publickey).
我在这里犯了什么小学生错误? .pem
文件位于我的主文件夹中(在 macOS 中)。它的权限如下所示:
-rw-------@ 1 mattroberts staff 1696 19 Nov 11:20 amazonec2.pem
chmod 400 myfile.pem
,因为它使用 PuTTYgen 从 pem 文件生成的 myfile.ppk
。
问题是文件上有错误的mod。
通过执行轻松解决 -
chmod 400 mykey.pem
取自 AWS 说明 -
您的密钥文件不得公开查看,SSH 才能正常工作。如果需要,请使用此命令:chmod 400 mykey.pem
400 通过使其只读且仅供所有者使用来保护它。
您可能使用了错误的用户名登录,因为——
大多数 Ubuntu 映像都有一个用户 ubuntu
亚马逊的 AMI 是 ec2-user
大多数 Debian 映像都有 root 或 admin
要登录,您需要调整 ssh
命令:
ssh -l USERNAME_HERE -i .ssh/yourkey.pem public-ec2-host
Permission denied (publickey).
而没有别的......
chmod 500 <path_to_pem_file>
应该这样做。
我知道这对游戏来说已经很晚了......但这总是对我有用:
步骤1
ssh-add ~/.ssh/KEY_PAIR_NAME.pem
第 2 步,只需 ssh 进入 :)
ssh user_name@<instance public dns/ip>
例如
ssh ec2-user@ec2-198-51-100-1.compute-1.amazonaws.com
希望这可以帮助某人。
ssh-agent -s
报告 SSH_AGENT_PID=3409; ssh-add 给出与上述相同的错误............这里有任何帮助请
好吧,唯一对我有用的是:
更改密钥 chmod 400 mykey.pem 的权限 确保使用 ec2-user 和正确的 ec2-99... 地址登录。当您登录并看到您的实例列出 ssh -i mykey.pem ec2-user@ec2-99-99-99-99.compute-1.amazonaws 时,ec2-99 地址位于 aws 控制台的底部。 com
看看this article。您不使用公共 DNS,而是使用表单
ssh -i your.pem root@ec2-XXX-XXX-XXX-XXX.z-2.compute-1.amazonaws.com
名称在您的 AMI 面板上可见
在 Windows 中,您可以转到 pem 文件的属性,然后转到安全选项卡,然后转到高级按钮。
删除继承和所有权限。然后授予自己完全控制权。毕竟 SSL 不会再给你同样的错误。
使用以下命令更改密钥文件的权限:
chmod 400 key-file-name.pem
请参阅 AWS 文档以连接到实例:
http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EC2_GetStarted.html#EC2_ConnectToInstance_Linux
我知道这个问题已经得到了回答,但是对于那些已经尝试过所有这些问题的人来说,你仍然会得到恼人的“权限被拒绝(公钥)”。尝试使用 SUDO 运行您的命令。当然这是一个临时解决方案,您应该正确设置权限,但至少这可以让您确定您当前的用户没有以您需要的权限运行(如您所假设的)
sudo ssh -i amazonec2.pem ec2-xxx-xxx-xxx-xxx.us-west-2.compute.amazonaws.com
执行此操作后,您将收到如下消息:
Please login as the user "ec2-user" rather than the user "root"
这也很少记录。在这种情况下,只需这样做:
sudo ssh -i amazonec2.pem ec2-xxx-xxx-xxx-xxx.us-west-2.compute.amazonaws.com -l ec2-user
你会得到光荣的:
__| __|_ )
_| ( / Amazon Linux AMI
___|\___|___|
2022 年 2 月更新:
请参阅 SSH 到 AWS 上的 EC2 实例的描述:
https://i.stack.imgur.com/lq3rQ.png
然后,您可以在下面找到“No.3”:
https://i.stack.imgur.com/Kjbju.png
因此,按照上面的“No.3”运行以下命令:
chmod 400 myKey.pem
在 Mac 终端中,执行“chmod 400 xyz.pem”对我没有帮助,它一直说权限被拒绝。对于 ubuntu 用户,我建议
ssh-add xyz.pem ssh -i xyz.pem ubuntu@ec2-54-69-172-118.us-west-2.compute.amazonaws.com(注意用户是ubuntu)
ssh -i /.pem user@host-machine-IP
我认为这是因为您输入了错误的凭据,或者您使用的是公钥而不是私钥,或者您的端口权限对所有 ssh 都是开放的。这对亚马逊不利。
此错误背后可能有三个原因。
您使用了错误的密钥。您的密钥没有正确的权限。您需要将其更改为 400。您使用了错误的用户。 Ubuntu 镜像有一个用户 ubuntu,亚马逊的 AMI 是 ec2-user,而 debian 镜像有 root 或 admin
SSH 密钥和文件权限最佳实践:
.ssh 目录 - 0700(仅限所有者)
私钥/.pem 文件 - 0400(所有者只读)
公钥/.pub 文件 - 0600(只能由所有者读写) chmod XXXX 文件/目录
使用 PuTTY 进行替代登录。它很好,但需要几个步骤。
获取您第一次创建 EC2 实例时生成的 .pem。使用 PuttyGen 将 .pem 文件转换为 .ppk,因为 PuTTY 不读取 .pem。打开 PuTTY 并输入您的主机名,即您的实例用户名 + 公共 DNS(例如 ubuntu@ec2-xxx-xxx-xxx-xxx.region.compute.amazonaws.com)。不是您的 AWS 账户用户名。然后导航到连接 > SSH > 身份验证。然后添加您的 .ppk 文件。单击浏览,其中显示“用于身份验证的私钥文件”。单击打开,您应该能够立即建立连接。
我在 Windows 中使用 PuTTY 0.66。
除了其他答案之外,这是我为此所做的工作:
如果您还没有,请将密钥复制到 .ssh 文件夹:
cp key.pem ~/.ssh/key.pem
授予密钥适当的权限
chmod 400 ~/.ssh/key.pem
启动 ssh-agent(感谢 https://stackoverflow.com/a/17848593 )
eval `ssh-agent -s` ssh-add
然后,添加密钥
ssh-add ~/.ssh/key.pem
现在您应该可以 ssh EC2 (:
默认情况下,每当您下载密钥文件时,它都具有 644 权限。
因此,每次下载新密钥时都需要更改权限。
chmod 400 my_file.pem
在 Windows 中,转到 .pem
文件,右键单击并选择 Properties。
转到安全选项卡中的高级
禁用和删除继承。
然后按添加并选择一个主体。
添加帐户用户名作为对象名称,然后按确定。
给予所有许可。
应用并保存更改。
现在检查上面的命令
您可以从 ASW 指南中找到答案。 400 通过使其只读且仅供所有者使用来保护它。
chmod 400 mykey.pem
在窗户里,
右键单击 pem 文件。然后选择属性。
选择安全选项卡 --> 单击高级按钮 --> 禁用继承 --> 从此对象删除所有继承的权限
点击 Add 按钮 --> Select a principal --> 在输入框中输入您的用户名 --> 点击 Check Names 按钮 --> 点击 Ok --> 点击 Ok --> 点击 Ok -->点击确定
执行 chmod 400 yourkeyfile.pem 如果您的实例是 Amazon linux,则使用 ssh -i yourkeyfile.pem ec2-user@ip for ubuntu ssh -i yourkeyfile.pem ubuntu@ip for centos ssh -i yourkeyfile.pem centos@ip
默认情况下,权限不允许 pem 密钥。您只需要更改权限:
chmod 400 xyz.pem
如果是 ubuntu 实例,则使用以下方式连接:
ssh -i xyz.pem ubuntu@ec2-yourraws.amazonaws.com
我的问题是我的 .pem 文件位于我的 NTFS 分区之一中。我把它移到了我的 linux 分区(ext4)。
通过运行提供所需的权限:
chmod 400 my_file.pem
它奏效了。
我看到了这个问题背后的两个原因
1)访问密钥没有正确的权限。不允许具有默认权限的 pem 密钥建立安全连接。您只需要更改权限:
chmod 400 xyz.pem
2) 还要检查您是否使用正确的用户凭据登录。否则,连接时使用 sudo
sudo ssh -i {keyfile} ec2-user@{远程主机的ip地址}
好吧,看看你的帖子描述,我觉得你犯了两个错误:-
为私钥设置正确的权限。下面的命令应该可以帮助您设置正确的文件权限。 chmod 0600 mykey.pem 您尝试登录的 ec2 用户错误。查看您的调试日志,我认为您已经生成了一个 Amazon linux 实例。该实例类型的默认用户是 ec2-user 。如果实例是 ubuntu ,那么您的默认用户将是 ubuntu 。 ssh -i privatekey.pem default_ssh_user@server_ip
注意:对于 Amazon Linux AMI,默认用户名是 ec2-user。对于 Centos AMI,默认用户名为 centos。对于 Debian AMI,默认用户名是 admin 或 root。对于 Fedora AMI,默认用户名是 ec2-user 或 fedora。对于 RHEL AMI,默认用户名是 ec2-user 或 root。对于 SUSE AMI,默认用户名是 ec2-user 或 root。对于 Ubuntu AMI,默认用户名是 ubuntu。否则,如果 ec2-user 和 root 不起作用,请咨询 AMI 提供商。
来源:https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AccessingInstancesLinux.html
密钥文件不应公开查看,因此请使用权限 400
chmod 400 keyfile.pem
如果上面的命令显示权限错误使用
sudo chmod 400 keyfile.pem
现在 ssh 进入 ec2 机器,如果仍然遇到问题,请使用 ec2-user
ssh -i keyfile.pem ec2-user@ec2-12-34-56-78.compute-1.amazonaws.com
你不是 root 然后运行这个命令
sudo chmod 400 -R myfile.pem
不是 root 然后运行此命令
chmod 400 -R myfile.pem
如果您从 Windows 连接,请在本地计算机上执行以下步骤。
导航到您的 .pem 文件。右键单击 .pem 文件并选择属性。选择安全选项卡。选择高级。确认您是该文件的所有者。如果没有,请将所有者更改为您的用户名。选择禁用继承并从此对象删除所有继承的权限。选择添加,选择主体,输入您的用户名,然后选择确定。在“权限条目”窗口中,授予读取权限并选择“确定”。单击应用以确保保存所有设置。选择确定关闭高级安全设置窗口。选择确定关闭属性窗口。您应该能够通过 SSH 从 Windows 连接到您的 Linux 实例。
在 Windows 命令提示符下,运行以下命令。
运行以下命令以重置和删除显式权限:icacls.exe $path /reset 运行以下命令以授予当前用户读取权限:icacls.exe $path /GRANT:R "$($env:USERNAME):( R)" 运行以下命令以禁用继承并删除继承的权限:icacls.exe $path /inheritance:r
您应该能够通过 SSH 从 Windows 连接到您的 Linux 实例。
这只是您的 aws pem 密钥的权限问题。
只需使用以下命令将 pem 密钥的权限更改为 400。
chmod 400 pemkeyname.pem
如果您无权更改文件的权限,则可以使用 sudo 如下命令。
sudo chmod 400 pemkeyname.pem
否则,如果您没有任何效果,请按照此视频更改您的 EC2 实例上的密钥。您现在可以在您的实例上安装公钥/私钥对。
清单:
您是否使用了正确的私钥 .pem 文件?它的权限设置是否正确? (我的亚马逊品牌 AMI 使用 644,但 Red hat 必须至少为 600 或 400。不了解 Ubuntu。)您在 ssh 行中使用了正确的用户名吗?亚马逊品牌 = “ec2-user”,红帽 = “root”,Ubuntu = “ubuntu”。用户可以指定为“ssh -i pem usename@hostname”或“ssh -l username -i pem hostname”
以下是 Linux 用户使用 .pem 文件连接服务器的简单步骤:
步骤1:到pem文件的位置并将其复制到home .ssh位置。
cp example.pem ~/.ssh/example.pem
第二步:更改权限
chmod 400 ~/.ssh/example.pem
第三步:运行以下命令
ssh -i ~/.ssh/example.pem ec2-user@host.com
由于此命令太长,因此您可以使用以下命令创建它的别名:
vim ~/.bashrc
最后按以下方式编写相同的命令。
alias sshConnect='ssh -i ~/.ssh/example.pem ec2-user@host.com'
现在重新启动您的系统并使用 sshConnect
连接您的服务器。
不定期副业成功案例分享
ssh -i YOUR_PEM_FILE.pem ec2-user@YOUR_IP
解决了这个问题。也许这应该是公认的答案......chmod u=rw,og= mykey.pem
为用户设置读+写权限,但其他人和组一无所获。