权限被拒绝(公钥)。从本地 Ubuntu 到 Amazon EC2 服务器的 SSH

Vor*_*Chy 227 linux ssh amazon-ec2

我有一个在 Amazon EC2 实例上的云中运行的应用程序实例,我需要从本地 Ubuntu 连接到它。它在一台本地 ubuntu 和笔记本电脑上运行良好。我Permission denied (publickey).在尝试从不同的本地 Ubuntu SSH 到 EC2 时收到此消息。

我认为 Amazon EC2 上的安全设置可能存在问题,它对一个实例的 IP 访问受到限制;或者可能需要重新生成证书。

有谁知道权限被拒绝错误的解决方案?

Gre*_*ill 148

在这种情况下要做的第一件事是使用-v选项 to ssh,这样您就可以查看尝试了哪些类型的身份验证以及结果如何。这是否有助于阐明情况?

在您对问题的更新中,您提到了“在另一个本地 Ubuntu 上”。您是否已将 ssh 私钥复制到另一台机器上?

  • 就我而言,我使用的是 bitnami .ami 并且没有意识到您需要以名为 bitnami 的用户身份登录,例如:`ssh -i <keyfile> bitname@<ec2-address>`。不幸的是,`-v` 选项没有帮助我找到这个,但它仍然非常有用! (21认同)
  • 好吧,就我而言,我使用了错误的用户名。正在使用“ubuntu”而不是“bitnami”。像这样:ssh -i key.pem bitnami@hostaddress (7认同)
  • 仅供参考,您可以使用 -i 标志指向密钥的路径而不安装它们 (3认同)
  • 一个好的引导也是远程节点本身,查看 `/var/log/auth.log`,有时你会看到以下消息: `Authentication denied: bad owner or patterns for file /var/lib/jenkins/.ssh /authorized_keys` 或其他东西 (3认同)
  • 我已经按照@Greg 的建议将 ssh 私钥复制到另一台机器上。它现在有效。谢谢! (2认同)
  • 这是一个旧线程,但这里值得一提的是,您不应该四处移动私钥。私钥的想法是它们保持私密性,除非您通过 USB 拇指驱动器或其他东西手动传输它们,否则您不应该传输私钥。更好的是在“其他本地 ubuntu”框中生成一个新的私钥,并将公钥添加到您要通过 SSH 连接的机器上。 (2认同)

Kje*_*sen 79

由于尚未明确提及,默认情况下 sshd 对authorized_keys文件的权限非常严格。所以,如果authorized_keys可写的用户以外的任何人或可以进行写由用户以外的任何人,它会拒绝进行身份验证(除非sshd的配置了StrictModes no

我所说的“可写”的意思是,如果任何父目录对用户以外的任何人都可写,则允许修改这些目录的用户可以开始修改权限,以便他们可以修改/替换authorized_keys。

此外,如果/home/username/.ssh目录不归用户所有,因此用户没有读取密钥的权限,您可能会遇到问题:

drwxr-xr-x 7 jane jane 4096 Jan 22 02:10 /home/jane
drwx------ 2 root root 4096 Jan 22 03:28 /home/jane/.ssh
Run Code Online (Sandbox Code Playgroud)

请注意,jane 不拥有该.ssh文件。通过修复这个

chown -R jane:jane /home/jane/.ssh
Run Code Online (Sandbox Code Playgroud)

这些类型的文件系统权限问题不会出现ssh -v在 sshd 日志中(!),直到您将日志级别设置为 DEBUG。

  • 编辑/etc/ssh/sshd_config。你想要一条LogLevel DEBUG在某处读入的行。使用发行版提供的机制重新加载 SSH 服务器。(service sshd reload在 RHEL/CentOS/Scientific 上。)正常重新加载不会删除现有会话。
  • 再次尝试进行身份验证。
  • 找出您的身份验证设施日志的去向并阅读它们。(IIRC,/var/log/auth.log在基于 Debian 的发行版上;/var/log/secure在 RHEL/CentOS/Scientific 上。)

更容易找出包含文件系统权限错误的调试输出出了什么问题。请记住/etc/ssh/sshd_config在完成后将更改还原到!

  • FWIW 密钥文件的正确权限是 600(请参阅[此处](http://superuser.com/questions/215504/permissions-on-private-key-in-ssh-folder)) (7认同)
  • 那个“可以写”位是什么让我 (5认同)
  • ~/.ssh 文件夹本身也是如此。您可能会收到以下错误消息:`身份验证被拒绝:目录所有权或模式错误` (4认同)
  • 我用头撞墙!我的用户文件夹权限错误。谢谢! (2认同)

小智 38

我收到此错误,因为我忘记添加-l选项。我的本地用户名与远程系统上的用户名不同。

这不能回答你的问题,但我来到这里是为了寻找我的问题的答案。

  • `ssh host -l user` 和 `ssh user@host` 是一样的,对吧? (27认同)
  • @Znarkus 是的,是一样的。 (3认同)

小智 20

我在基于 Ubuntu AMI 的新实例上收到此消息。我正在使用 -i 选项来提供 PEM,但它仍然显示“权限被拒绝(公钥)”。

我的问题是我没有使用正确的用户。通过使用 ubuntu@ec2 运行 ssh ......它像往常一样工作。


Zna*_*kus 17

ssh -v(当然在我看来)更容易阅读的东西是tail -f /var/log/auth.log. 这应该在您尝试连接的服务器上运行,同时尝试连接。它将以纯文本形式显示错误。

这帮助我解决了我的问题:

来自 xx.yy.com 的用户 [用户名] 不允许,因为 AllowGroups 中未列出任何用户组


小智 11

检查您的/etc/ssh/sshd_config文件。在那里,找到说

PasswordAuthentication no
Run Code Online (Sandbox Code Playgroud)

需要修改该行以说是而不是否。另外,之后重新启动 sshd 服务器。

sudo /etc/init.d/ssh restart
Run Code Online (Sandbox Code Playgroud)

  • 这会降低服务器的安全性。 (21认同)
  • 如果我们甚至无法进入服务器,我们如何进入`/etc/ssh/sshd_config`? (2认同)

Eri*_*ond 7

也许与当前的海报无关,但可能会帮助其他人在寻找类似情况的答案时发现这一点。我建议不要让 Amazon 生成 ssh 密钥对,而是建议将您自己的、标准的、默认的公共 ssh 密钥上传到 Amazon,并在您运行 EC2 实例时指定该密钥。

这使您可以在 ssh 中删除“-i”类型语法,将 rsync 与标准选项一起使用,还可以让您在所有 EC2 区域中使用相同的 ssh 密钥。

我在这里写了一篇关于这个过程的文章:

将个人 ssh 密钥上传到 Amazon EC2
http://alestic.com/2010/10/ec2-ssh-keys


小智 5

奇怪的是,我的问题原来是服务器已经重新启动并被分配了一个新的 DNS 名称。我使用的是旧的 DNS 名称。我知道这听起来很愚蠢,但我花了一段时间才弄明白。