我在 Amazon EC2 实例上的云中运行一个应用程序实例,我需要从本地 Ubuntu 连接到它。它在一台本地 Ubuntu 和笔记本电脑上运行良好。Permission denied (publickey).
当我尝试从一台不同的本地 Ubuntu。
我认为 Amazon EC2 上的安全设置可能存在问题,它限制了对一个实例的 IP 访问;或者可能需要重新生成证书。
有谁知道权限被拒绝错误的解决方案?
答案1
在这种情况下,首先要做的是使用选项-v
,ssh
这样您就可以看到尝试了哪些类型的身份验证以及结果是什么。这有助于阐明情况吗?
在您更新问题时,您提到“在另一个本地 Ubuntu 上”。您是否已将 ssh 私钥复制到另一台机器上?
答案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
请注意,jane 不拥有该.ssh
文件。通过以下方式修复此问题
chown -R jane:jane /home/jane/.ssh
这些类型的文件系统权限问题不会显示出来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
完成后记得恢复更改!
答案3
我收到此错误,因为我忘记添加-l
选项。我的本地用户名与远程系统上的用户名不同。
这并没有回答您的问题,但我来这里是为了寻找我的问题的答案。
答案4
比 更容易阅读的东西ssh -v
(当然在我看来)是tail -f /var/log/auth.log
。 尝试连接时,应在尝试连接的服务器上运行。 它将以纯文本显示错误。
这帮助我解决了我的问题:
不允许来自 xx.yy.com 的用户 [用户名],因为 AllowGroups 中未列出任何用户的组