我有一个在Amazon EC2实例上的云中运行的应用程序的实例,我需要从本地Ubuntu连接它。它可以在本地ubuntu之一和笔记本电脑上正常工作。尝试在另一个本地Ubuntu上将SSH访问EC2时,出现消息“权限被拒绝(公钥)”。我感到很奇怪。

我正在考虑Amazon EC2上的安全设置存在某种问题,该IP只能限制对一个实例或证书的IP访问。

有人知道解决方案吗?

评论

“它以前曾经工作过”-在什么之前?

我有一个Elastic Beanstalk EC2实例。截至2013年8月,解决方案是以ec2-user用户身份访问实例,从而消除了Permission Denied(publicKey)错误。即:ssh -i ./mike-key-pairoregon.pem ec2-user@ec2-some-address.us-west-2.compute.amazonaws.com。当然,根据stackoverflow.com/questions/4742478/…,您还必须处理所有其他内容。

如果您指定了错误的用户名,则会出现此问题。 AWS文档(docs.aws.amazon.com/AWSEC2/latest/UserGuide/…)当前给出了一个示例,其用户名为ec2-user [ssh -i /path/my-key-pair.pem ec2-user @ ec2-198 -51-100-1.compute-1.amazonaws.com],而我的(旧)ubuntu框的用户名是ubuntu,因此在使用示例时,我收到此错误,更改为正确的用户名即可解决。

@ david.barkhuizen,您的评论对我有所帮助。我有一个类似的问题。原来,这与用户名有关。谢谢。

#1 楼

在这种情况下,要做的第一件事是对-v使用ssh选项,这样您可以看到尝试了哪种身份验证以及结果是什么。

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

评论


我已经按照@Greg的建议将ssh私钥复制到了另一台计算机上。现在可以使用了。谢谢!

–Vorleak Chy
09年7月16日在2:03

仅供参考,您可以使用-i标志指向键的路径,而无需安装它们

–乔治·巴尔加斯(Jorge Vargas)
2010-11-3 23:35

就我而言,我使用的是bitnami .ami,却没有意识到您需要以名为bitnami的用户身份登录,例如:ssh -i bitname @ 。不幸的是,-v选项并没有帮助我找到它,但是检查它仍然非常有用!

–马特·康诺利
2012年1月20日4:44

好吧,以我为例,我使用了错误的用户名。正在使用“ ubuntu”而不是“ bitnami”。像这样:ssh -i key.pem bitnami @ hostaddress

–卢卡斯·波特斯基(Lucas Pottersky)
2012年4月15日在21:44



远程节点本身也是一个不错的选择,查看/var/log/auth.log,有时您会看到以下消息:身份验证被拒绝:错误的所有权或文件/var/lib/jenkins/.ssh/authorized_keys的模式或其他的东西

–乔纳斯·利布布雷特(Jonas Libbrecht)
17年1月31日在9:11



#2 楼

尚未明确提及,默认情况下,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


请注意,简并不拥有.ssh文件。通过

chown -R jane:jane /home/jane/.ssh


修复此问题,这些文件系统权限问题将不会在ssh -v中显示,并且甚至不会出现在sshd日志(!)中。将日志级别设置为DEBUG。


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

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

评论


那“可以写”的意思是让我着迷的

– wmarbut
2012年8月14日,3:20

FWIW密钥文件的正确权限是600(请参阅此处)

–马特·里昂
2012年11月28日4:22

是的,我的.authorized_keys文件可按组写入,因此拒绝接受。

– Aditya M P
13年8月7日在8:45

我的头撞在墙上!我的用户文件夹权限错误。谢谢!

– XJones
2014年6月12日23:19

〜/ .ssh文件夹本身也是如此。您可能会收到以下错误消息:身份验证被拒绝:所有权错误或目录模式

–叶夫根尼M.
14年7月30日在23:01

#3 楼

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

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

评论


ssh host -l用户与ssh user @ host相同,对吗?

– Znarkus
2011年2月1日下午14:08

@Znarkus是的,是一样的。

– Cregox
2011年4月19日在16:53

是的,这也解决了导致“权限被拒绝(公钥)”错误的问题。

–布鲁克斯·摩西
2011年6月2日21:30

这是我的问题。我期望用户“ root”可以工作,但是我使用的是具有默认用户“ ubuntu”的Ubuntu EC2映像。

–塞林
2013年6月14日19:54

#4 楼

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

我的问题是我没有使用正确的用户。通过使用ubuntu @ ec2运行ssh ...可以正常工作。

评论


是的...我正在使用sudo运行命令,这就是为什么它不起作用的原因。

– thaddeusmt
2011年9月17日下午12:56

#5 楼

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

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


不允许来自xx.yy.com的用户[用户名],因为用户组列在AllowGroups


评论


这是服务器日志。对于RHEL / CentOS 7:tail -f / var / log / secure

– Gianfranco P.
15年7月13日在22:05

#6 楼

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

PasswordAuthentication no


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

sudo /etc/init.d/ssh restart


评论


这样会使服务器的安全性降低。

– Znarkus
2011年2月1日下午13:45

这就是我遇到的问题:我想为另一个用户设置一个帐户,仅使用密码进行身份验证。我还希望能够以自己的身份从没有私钥的地方登录。

–丹尼尔(Daniel)
2011年4月10日在22:28

如果我们什至无法进入服务器,该如何去/ etc / ssh / sshd_config?

–cyber8200
2015年6月27日12:50



要进入服务器本身,必须使用它们在创建实例时给出的PEM文件。该说明之后。

– Sudipta Chatterjee
15年6月29日在18:27

这对我有用,尽管重新启动sshd需要以下命令:sudo service sshd reload

– pacoverflow
18-10-19在19:23

#7 楼

也许与当前发布者无关,但可能会帮助其他人在寻找类似情况的答案时找到它。建议您不要将自己的标准默认默认公共ssh密钥上传到Amazon,而不是让Amazon生成ssh密钥对,并指定在运行EC2实例时指定该密钥。在ssh中键入语法,在标准选项中使用rsync,还允许您在所有EC2区域中使用相同的ssh密钥。

我在这里写了一篇有关此过程的文章:


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


评论


+1正正是出于这个原因查找了这个问题。

– John Riselvato
13年5月30日在18:36

我在关注您的文章时看到此错误。 region = $(ec2-describe-regions | cut -f2)缺少必需的选项-K,-private-key KEY(使用-h)

– KashifAli
2013年9月1日14:01



@KashifAli您将需要设置EC2 API命令行工具凭据,因此您不必总是在每个命令行上都传递凭据。

–埃里克·哈蒙德(Eric Hammond)
2013年9月5日在7:14

#8 楼

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

评论


谢谢!这正是我的问题。重新启动实例时,我没有意识到DNS名称已更改。

– Tim Swast
2012年1月2日,下午3:36

就我而言,*。compute.amazonaws.com URL在分配弹性IP时发生了更改。

–杰弗里·布斯(Geoffrey Booth)
2014年1月26日在22:14

#9 楼

如果要连接到运行Dropbear的CyanogenMod电话,则应运行以下行,以确保所有权限都正确:

chmod 600 /data/dropbear/.ssh/authorized_keys




chmod 700 /data/dropbear/.ssh/authorized_keys # In case of MacOS X 10.6-10.8




chmod 755 /data/dropbear/ /data/dropbear/.ssh


此问题已为我修复,否则无法连接。

评论


“当尝试在另一个本地Ubuntu上将SSH访问EC2时。”

– Grammargeek
2015年10月8日在10:42

如果我没有authorized_keys怎么办?

– IgorGanapolsky
16年8月18日在9:00

#10 楼

如果您使用的是CentOS 5,则可能要在StrictModes no中设置/etc/ssh/sshd_config。我正在使用NIS / NFS共享/ home目录,并且我正确设置了所有权限,但是它总是提示我输入密码。设置StrictModes no之后,问题消失了!

#11 楼

Greg的答案说明了如何更好地解决它,但是实际的问题是,您在事务(客户端)的一侧设置了ssh密钥,该密钥正在尝试进行公共密钥身份验证,而不是基于密码的身份验证。由于您在EC2实例上没有相应的公钥,因此无法使用。

评论


您如何解决该问题?

–朱利安·格里尼尔(Julien Grenier)
2011年5月15日在1:49

#12 楼

我遇到了同样的问题,在尝试了许多无法解决的解决方案后,我在路由器的防火墙上打开了SSH端口(路由器的防火墙控制面板很乱,因此很难告诉发生了什么事)。无论如何,它已经解决了:)

令人讨厌的是,您得到的错误是“权限被拒绝”,这意味着建立了某种连接,grr。

#13 楼

即使我按照所有步骤进行操作,我也遇到相同的问题


$ ec2-authorize default -p 22


但是,我是在us-west-1中启动实例的地区。因此,上面的命令还应该指定该内容。我花了一段时间
我意识到了这个问题,希望这篇文章对其他人有帮助。

#14 楼

这是一种罕见的情况,但是如果启用了selinux,并且正在使用带有nfs的带有authorized_keys的目录(例如,共享主目录),则需要禁用selinux(出于安全原因不建议使用,但可以暂时将其禁用)看看这是否引起问题)或允许selinux使用nfs主目录。我不清楚细节,但这对我有用
setsebool -P use_nfs_home_dirs 1

#15 楼

在无意中向用户主目录添加了组写权限后,我也遇到了同样的问题。

我是在计算机上运行tail -f /var/log/secure并看到错误Authentication refused: bad ownership or modes for directory /home/<username>的原因,这是原因。

#16 楼

TL; DR-确保您使用正确的用户名-ubuntu / ec2-user / etc。

我正在使用堡垒主机(ec2),它是Amazon Linux OS,(ec2-user)和尝试从堡垒主机到私有主机(ec2),即Ubuntu 18.04 OS(ubuntu

这听起来很有趣,因为您应该知道要SSH连接的计算机的用户名,但是由于我通过SSH连接到多台计算机,有时会犯这些错误。