我有一个在Amazon EC2实例云中运行的应用程序的实例,我需要从我的本地Ubuntu连接它。 它在当地的Ubuntu和笔记本电脑之一工作正常。 当尝试在另一个本地Ubuntu上访问SSH到EC2时,我收到了“Permission denied(publickey)”的消息。 这对我来说太奇怪了。
我正在考虑Amazon EC2上的安全设置问题,这些安全设置限制了IP访问一个实例,或者证书可能需要重新生成。
有谁知道一个解决scheme?
在这种情况下要做的第一件事就是使用-v
选项来使用ssh
,这样你就可以看到什么样的身份validation以及结果是什么。 这有助于启发情况吗?
在你的问题更新中,你提到“在另一个本地的Ubuntu”。 你是否将ssh私钥复制到另一台机器上?
由于没有明确提到,sshd默认对authorized_keys
文件的权限非常严格。 因此,如果authorized_keys
对于用户以外的任何人都是可写的 ,或者可以由除了用户以外的任何人写入 ,它将拒绝authentication(除非sshdconfiguration了StrictModes no
)
我的意思是“可以写入”是,如果任何其他的父目录对于用户以外的任何人都是可写的,则允许修改这些目录的用户可以开始修改权限,以便他们可以修改/replaceauthorized_keys。
这不会显示ssh -v
,它会显示在由sshd发出的日志中(通常放在/var/log/secure
或/var/log/auth.log
,取决于distro和syslogd
configuration)。
从人sshd(8):
~/.ssh/authorized_keys Lists the public keys (RSA/DSA) that can be used for logging in as this user. The format of this file is described above. The content of the file is not highly sensitive, but the recommended permissions are read/write for the user, and not accessible by others. If this file, the ~/.ssh directory, or the user's home directory are writable by other users, then the file could be modified or replaced by unauthorized users. In this case, sshd will not allow it to be used unless the StrictModes option has been set to “no”.
我收到这个错误,因为我忘了添加-l
选项。 我的本地用户名和远程系统不一样。
这不能回答你的问题,但我到了这里寻找我的问题的答案。
我在一个基于Ubuntu AMI的新实例上得到这个消息。 我正在使用-i选项来提供PEM,但仍显示“权限被拒绝(publickey)”。
我的问题是,我没有使用正确的用户。 通过与ubuntu @ ec2运行SSH …它正常工作。
比ssh -i
(在我看来当然)更容易阅读的是tail -f /var/log/auth.log
。 这应该在尝试连接的服务器上运行。 它将以纯文本显示错误。
这帮助我解决了我的问题:
来自xx.yy.com的用户[用户名]不允许,因为没有用户的组在AllowGroups中列出
检查你的/ etc / ssh / sshd_config文件。 在那里,find说的那一行
PasswordAuthentication no
这条线需要修改,而不是没有。 另外,之后重新启动sshd服务器。
sudo /etc/init.d/ssh restart
也许与当前海报不相关,但可能帮助其他人在寻找类似情况的答案时发现这一点。 我build议您不要让Amazon生成ssh密钥对,而是将自己的标准默认公用ssh密钥上传到Amazon,并在运行EC2实例时指定。
这使您可以在ssh中删除“-i”types的语法,使用带有标准选项的rsync,还可以跨所有EC2区域使用相同的ssh密钥。
我在这里写了一篇关于这个过程的文章:
将个人ssh密钥上传到Amazon EC2
http://alestic.com/2010/10/ec2-ssh-keys
奇怪的是,我的问题原来是服务器已经重新启动,并发出一个新的DNS名称。 我正在使用旧的DNS名称。 我知道这听起来很愚蠢,但我花了一段时间才弄明白这一点。
格雷格的答案解释了如何更好地解决问题,但实际的问题是,您在事务(客户端)的一侧设置了ssh密钥,该密钥试图进行公钥authentication,而不是基于密码的authentication。 由于EC2实例上没有相应的公钥,因此这将不起作用。
我有同样的问题,并尝试了大量的解决scheme失败后,我打开了我的路由器的防火墙上的SSH端口(我的路由器的防火墙控制面板是一团糟,所以很难说是怎么回事)。 无论如何,固定它:)
超级血腥恼人,你得到的错误是权限被拒绝,暗示有某种连接,grr。
即使我想要遵循所有的步骤,我也遇到了同样的问题
$ ec2-authorize default -p 22
但是,我已经开始了我在西一1地区的实例。 所以上面的命令也应该指定。
$ ec2-authorize default -p 22 --region us-west-1
在这个命令后,我能够ssh进入实例。 我花了一点时间才明白了这个问题,并希望这个post能帮助别人。
如果您尝试连接到运行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
这固定它,否则什么都不能连接。
如果您使用CentOS 5,则可能需要在/etc/ssh/sshd_config
设置StrictModes no
。 我使用NIS / NFS共享/ home目录,并且我正确设置了所有的权限,但是它总是提示我input密码。 当我设置了StrictModes no
之后,问题就消失了!
这是一种罕见的情况,但是如果启用了selinux,并且使用nfs作为authorized_keys的目录(例如共享主目录),则需要禁用selinux(不build议出于安全原因,但是可以暂时禁用它看看是否导致这个问题)或允许selinux使用nfs主目录。 我不清楚的细节,但这对我工作setsebool -P use_nfs_home_dirs 1
在将用户主目录的组写入权限无意中添加后,我遇到了同样的问题。
我发现这是通过在机器上运行tail -f /var/log/secure
并查看错误Authentication refused: bad ownership or modes for directory /home/<username>
。