我有一个在Amazon EC2实例上的云中运行的应用程序的实例,我需要从本地Ubuntu连接它。它可以在本地ubuntu之一和笔记本电脑上正常工作。尝试在另一个本地Ubuntu上访问SSH到EC2时,出现消息“权限被拒绝(公钥)”。我真奇怪
我正在考虑Amazon EC2上的安全性设置存在某种问题,该IP地址只能限制对一个实例或证书的IP访问,可能需要重新生成。
有人知道解决方案吗?
我有一个在Amazon EC2实例上的云中运行的应用程序的实例,我需要从本地Ubuntu连接它。它可以在本地ubuntu之一和笔记本电脑上正常工作。尝试在另一个本地Ubuntu上访问SSH到EC2时,出现消息“权限被拒绝(公钥)”。我真奇怪
我正在考虑Amazon EC2上的安全性设置存在某种问题,该IP地址只能限制对一个实例或证书的IP访问,可能需要重新生成。
有人知道解决方案吗?
Answers:
在这种情况下,要做的第一件事是使用-v
选项ssh
,这样您可以查看尝试了哪种身份验证以及结果是什么。这有助于启发情况吗?
在对问题的更新中,您提到“在另一个本地Ubuntu上”。您是否已将ssh私钥复制到另一台计算机上?
ssh -i <keyfile> bitname@<ec2-address>
。不幸的是,该-v
选项并没有帮助我找到此选项,但是检查它仍然非常有用!
/var/log/auth.log
,有时您会看到以下消息:Authentication refused: bad ownership or modes for file /var/lib/jenkins/.ssh/authorized_keys
或其他消息
尚未明确提及,默认情况下,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
,并且在您将日志级别设置为DEBUG之前,它们甚至都不会显示在sshd日志(!)中。
/etc/ssh/sshd_config
。您想要一条LogLevel DEBUG
在某处读取的行。使用发行版提供的机制重新加载SSH服务器。(service sshd reload
在RHEL / CentOS / Scientific上。)平稳的重载不会删除现有的会话。/var/log/auth.log
基于Debian的发行版;/var/log/secure
RHEL / CentOS / Scientific。)更容易找出包含文件系统权限错误的调试输出出了什么问题。切记将更改还原到/etc/ssh/sshd_config
完成后!
Authentication refused: bad ownership or modes for directory
我收到此错误,因为我忘记添加-l
选项。我的本地用户名与远程系统上的用户名不同。
这不能回答您的问题,但是我到这里来寻找问题的答案。
ssh host -l user
和一样ssh user@host
吗?
我在基于Ubuntu AMI的新实例上收到此消息。我正在使用-i选项来提供PEM,但它仍显示“权限被拒绝(公钥)”。
我的问题是我没有使用正确的用户。通过使用ubuntu @ ec2运行ssh ...可以正常工作。
sudo
,这就是为什么它不起作用的原因。
比ssh -v
(我认为当然)更容易阅读的内容是tail -f /var/log/auth.log
。它应在尝试连接的服务器上运行。它将以纯文本显示错误。
这帮助我解决了我的问题:
不允许来自xx.yy.com的用户[用户名],因为AllowGroups中未列出任何用户组
tail -f /var/log/secure
检查您的/ etc / ssh / sshd_config文件。在那里找到那行,上面写着
PasswordAuthentication no
该行需要修改为是而不是否。另外,之后重新启动sshd服务器。
sudo /etc/init.d/ssh restart
/etc/ssh/sshd_config
如果我们什至无法进入服务器,该如何去?
sudo service sshd reload
也许与当前发布者无关,但可能会帮助其他人在寻找类似情况的答案时找到它。建议不要让Amazon生成ssh密钥对,而是建议将自己的标准默认默认公共ssh密钥上载到Amazon,并在运行EC2实例时指定该密钥。
这使您可以在ssh中删除“ -i”类型语法,在标准选项中使用rsync,还可以在所有EC2区域中使用相同的ssh密钥。
我在这里写了一篇有关此过程的文章:
将个人ssh密钥上传到Amazon EC2
http://alestic.com/2010/10/ec2-ssh-keys
奇怪的是,我的问题原来是服务器已重新启动,并被赋予了新的DNS名称。我使用的是旧的DNS名称。我知道这听起来很愚蠢,但花了我一段时间才弄清楚。
如果要连接到运行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
这对我来说已经解决了,否则什么也无法连接。
Greg的答案说明了如何更好地解决它,但是实际的问题是,您在事务的一侧(客户端)设置了一个ssh密钥,该密钥正在尝试公用密钥身份验证,而不是基于密码的身份验证。由于您在EC2实例上没有相应的公钥,因此将无法使用。
我遇到了同样的问题,在尝试了许多无法解决的解决方案后,我在路由器的防火墙上打开了SSH端口(路由器的防火墙控制面板很乱,因此很难告诉发生了什么事)。无论如何,它解决了:)
超级血腥的烦人,您得到的错误是“权限被拒绝”,这意味着建立了某种连接,grr。
即使我按照以下所有步骤进行,我也遇到了同样的问题
$ ec2-authorize default -p 22
但是,我是在us-west-1地区开始工作的。因此,以上命令还应指定该内容。
$ ec2-authorize default -p 22 --region us-west-1
执行此命令后,我就可以进入实例了。我花了一段时间才意识到这个问题,希望这篇文章对其他人有所帮助。