我使用 puttygen.exe
创建了密钥对(客户端是Windows 8) . 在服务器(Ubuntu 12.04.3 LTS)上,我将我的公钥放在 ~/.ssh/authorized_keys
中 . 公钥是这样的:
ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAQEAopfM6RHOgnuc4Aftn3t4k5UIAT3StCAbn/vg/IMbphbXadshC+79sIlRq3P4zGzMjFTP4hKnzu6ehLV5lmj/qorq3SKT+bPO5Qrac3VbIlrGvuBFDDjP82I2Hwg3HzlsFTstqk++KToapaTYZ7jENEYyPl2wnzITJnt//+4U1o6juoXTKgdNE02hHnRZyHOV/bnkZyJJCEwJv5U0eXSThQnhmXtUxGT8U0HQNFiXfqIIVllhWiCnyrhhIaKz/CIJNAd2VmzyJzQtJtTQX8aWSNVrZju6Sv2/RncTNvsACdNgjjh/FH8PQXaep00jlJ3MOdsC8vz6VSPFbh6iKy1oLQ== rsa-key-20131231
所以这是正确的(一行,没有评论,从ssh-rsa开始,等等)
.ssh
dir权限级别为700,authorized_keys文件权限为600.我尝试登录的实际用户拥有的目录和文件 .
当我尝试连接时,我得到了 'server refused our key'
,服务器要求输入密码 . 就这样 . 尝试使用密钥登录时, /var/log/auth.log
没有记录任何内容 .
我到处寻找,所有文章和提示都提到为文件/目录设置chmod 600和700并正确格式化密钥 . 我已经做了所有这些仍然'拒绝我们的关键'错误,我没有想法 .
24 回答
在我的情况下,我不得不在Centos6.6上禁用SELinux以使其工作:)
编辑/ etc / selinux / config并设置以下内容,然后重新启动主机 .
BTW ...忘了提到我必须设置LogLevel = DEBUG3来识别问题 .
好吧,我的钥匙上有一个小错字 . 显然,当粘贴到文件时,第一个字母被切断,它以sh-rsa而不是ssh-rsa开头 .
nrathathaus - 你的答案非常有帮助,非常感谢,这个答案归功于你:)我喜欢你说并在sshd_conf中设置:
通过查看日志,我意识到sshd正确读取密钥但由于标识符不正确而拒绝它 .
添加一些想法作为其他答案有帮助,但不完全适合 .
首先,如接受的答案中所述,编辑
并设置日志级别:
然后尝试进行身份验证,当它失败时,查找日志文件:
它会有你想要的错误 .
在我的情况下,我不得不将/ home / user的权限从0755更改为0700 .
在我的情况下,是一个权限问题 .
我将日志级别更改为
DEBUG3
,并在/var/log/secure
中看到此行:谷歌搜索,我发现这篇文章:
https://www.daveperrett.com/articles/2010/09/14/ssh-authentication-refused/
基本上,它告诉我:
摆脱用户主目录的组
w
权限更改
.ssh
目录700
的权限更改
authorized_keys
文件600
的权限 .这很有效 .
Another thing is that even I enabled root login, I cannot get root to work. Better use another user.
我正在添加这个答案,以帮助像我一样花费数小时搜索互联网但没有成功的人 .
您的家庭文件夹可能会被加密 .
或者就此而言,嵌套了“authorized_keys”文件的任何文件夹 . 伙计,这会为我节省很多时间 . 要检查,请执行
在您要确定其加密状态的目录上 . 如果该文件夹包含名为“.encryptfs”的文件夹,则答案是,该文件夹已加密 . 这将妨碍您访问包含验证所需的公共ssh密钥的“authorized_keys”文件 .
要解决此问题,请将“authorized_key”文件放在不包含加密的目录树中 .
我找到的简单解决方案是将
authorized_keys
文件从隐藏的.ssh目录移开并将其放在系统ssh目录中:我一做到这一点就没有问题 .
在Windows Server 2008 r2中遇到同样的问题,并探索了很多要解决的问题,最后通过以下方式做到了:
使用textpad或任何其他文本编辑器打开C:\ Program Files(x86)\ OpenSSH \ etc \ sshd_config
删除以下行中的注释,删除后应如下所示:
保存并尝试使用私钥登录 . 玩得开心 .
Thanks!
谢谢
LogLevel DEBUG3
(在我的情况下,CentOS 7
日志在/var/log/secure
)事实证明我的
.ssh/authorized_keys
模式是644
而不是600
,并且sshd
觉得单独是禁止的,我终于发现了读取该日志文件!感谢nrathaus和
/var/log/auth.log
对调试级别的调查如下 .另一个原因是您的主目录可能具有不同于755的权限 .
我今天遇到了这个问题,我的问题是,当从文件复制公钥时,也包括换行符 . 您可以在vim中使用“:set list”查看所有隐藏的新行,并确保删除除最后一行之外的所有新行 . 此外,我的钥匙在开始时缺少“ssh-rsa” . 确保你也有 .
对于那些从Windows Server收到此错误的人,我收到了同样的错误,这是一个用户帐户问题 . 对于许多组织,管理员的组策略可能不允许设置SSH服务器和连接 . 使用这种类型的设置,必须从本地管理员帐户完成 . 如果您确认公钥中没有任何拼写错误,可能值得研究 .
我在solaris上遇到了同样的错误,但在/var/adm/splunk-auth.log中找到了以下错误:
在/ etc / shadow中,帐户被锁定:
删除了“* LK *”部分:
我可以像往常一样使用ssh和authorized_keys .
在我的情况下,它是由(
/etc/ssh/sshd_config
)引起的:更改为
yes
,重新启动服务并正常进入 .我正在使用带有psftp的PUTTYgen文件,当我们需要为客户端创建新密钥时,我在Windows Server上遇到了这个问题 . private_key_name.ppk文件和open_ssh.txt文件必须位于同一目录中才能使连接正常工作 .
在我的情况下,家庭在nfs是777,需要750.这解决了问题 .
我已经解决了这个问题,puttygen是第三方软件,由它生成的ssh密钥没有直接使用,所以你必须做一些改动 . 例如,它看起来像这样
我省略了中间的一些字母,替换为*,如果没有,StackOverflow告诉我代码格式错误,不要让我发帖 .
这是我的puttygen生成的ssh密钥,你必须改为这个
在我的情况下,我删除了一些评论,例如
并在开头添加
ssh-rsa
,最后添加yourname@hostname
. note :不要在最后删除==
,你必须为你更改"yourname"和"hostname",在我的情况下,是uaskh@mycomputer
,你的名字是你要登录你的vps . 当所有这些事情都完成后,你可以上传公钥到了uaskh的主页~/.ssh/authorized_keys
由cat public-key >> ~/.ssh/authorized_keys
然后sudo chmod 700 ~/.ssh
sudo chmod 600 ~/.ssh/authorized_keys
然后你必须修改/ etc / ssh / sshd_config,RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
我的操作系统是CentOS 7,这是我第一次回答问题,我会尽力去做,谢谢!我有这个问题,其中sshd只读取
authorized_keys2
.复制或重命名文件为我解决了问题 .
附:我正在使用Windows中的Putty并使用PuTTyKeygen进行密钥对生成 .
在尝试通过Mobaxterm登录时,我遇到了类似的问题 . 私钥是通过puttygen生成的 . 在我的情况下,重新生成密钥有帮助 .
使用Cpanel时,您可以检查密钥是否已获得授权
SSH访问>>公钥>>管理>>授权或取消授权 .
如果你在
/var/log/secure
中收到此错误这意味着你的密钥有空间,如果你在查看
.ppk
文件时通过puttgen生成密钥,它将如下所示:当你尝试粘贴它时,你会在读取密钥时出错,所以尝试编辑密钥并使其成为一行并尝试一下
这应该看起来像什么
ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAQEAoo3PFwX04NFG+rKz93l7em1BsUBzjHPMsswDal74MLaJyhQD0pE23NS1izahbo1sJGnSJu2VJ//zxidSsba6xa6OvmeiKTwCz0E5GMefdGVdpdbTlv99qjBl1+Nw1tDnHIC0+v9XmeZERQfCds9Kp1UivfReoYImntBCgLtNyqRYrSu8csJCt7E1oY8QK6WP1vfYgAQ2taGyS9+g7FHyyf5VY2vH3oWzzbqzxjsSLAv3zEQSm1LzSw9Pvc8iwasFyUMBOPj31CKQYTXyX8KpJTr0Zb7oqMauBE5LVwxZhlcJHbj0FsMbF/+GRjvgexymCi3bHmwGQ6FEADNd0RkhdQ== username@domainname
对我有用的是:
停止了ec2实例
分离音量
使用相同的密钥将卷附加到旧实例,并且能够进行SSH
将卷装入某个临时文件夹中
检查了目录mount_point / home / ec2-user / .ssh / authorized_keys中的文件
理想情况下,此文件需要包含我们的密钥信息,但对我来说这个文件是空的
将旧实例authorized_keys文件复制到新安装的卷
卸载设备
重新连接到原始ec2实例
启动它并让它通过 Health 检查
这次对我有用 . 但是,当实例启动时,我首先不会获得我的密钥文件信息 . 检查此链接https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/TroubleshootingInstancesConnecting.html#TroubleshootingInstancesConnectingMindTerm
在我的情况下,问题是这样的,在生成ssh密钥期间,我故意更改了密钥的默认目录 . 因此,我选择使用
~/home/user/folder1/.ssh/authorized_keys
而不是使用位置〜/ .ssh / authorized_keys,为了使这些更改正常工作,我应该对此文件/etc/ssh/sshd_config
上的新位置进行相同的更改 . 但在我意识到这一点之前,我已经尝试了其他人在这里建议的几个解决方案,包括将主文件夹的权限设置为700
和.ssh目录600
.另一个原因可能是
authorized_keys
文件中的UTF-8 BOM .