当前位置: 首页>>技术教程>>正文


尝试使用密钥文件进行ssh身份验证:服务器拒绝了我们的密钥

, , ,

问题描述

我正在尝试使用密钥文件而不是用户名/密码来设置ssh身份验证。客户端是运行PuTTY的Windows机器,服务器是Ubuntu 12.04 LTS服务器。

我下载了puttygen.exe并生成了密钥对。在/etc/ssh/sshd_config我有这一行:

AuthorizedKeysFile %h/.ssh/authorized_keys

在我客户的公钥文件中,它说:

---- BEGIN SSH2 PUBLIC KEY ----
Comment: "my@email.address.com"
ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAIEAr3Qo6T5XU06ZigGOd3eKvfBhFLhg5kWv8lz6
qJ2G9XCbexlPQGanPhh+vcPkhor6+7OmB+WSdHeNO652kTofnauTKcTCbHjsT7cJ
GNrO8WVURRh4fabknUHPmauerWQZ6TgRPGaz0aucU+2C+DUo2SKVFDir1vb+4u83
AV1pKxs=my@email.address.com
---- END SSH2 PUBLIC KEY ----

我将部件从“ssh-rsa AAA”复制到”my@email.address.com”并将其放在我服务器上的~/.ssh/authorized_keys文件中(在我自己的主文件夹中)。在连接>下的PuTTY中SSH>验证我输入了它在客户端上生成的私钥的路径并保存了会话设置。

我重新启动了ssh服务器

sudo service ssh restart

现在,如果我在PuTTY中加载配置文件(我验证私钥仍然在Connection> SSH> Auth并且路径正确)并运行配置文件,它说

Server refused our key

我尝试将公钥放在./ssh/authorized_keys/目录下的文件中,但这没有帮助,所以我使用./ssh/authorized_keys作为文件,粘贴其中的密钥。我还尝试在服务器上生成私钥/公钥对,将公钥放在./ssh/authorized_files中,并在我的客户端上加载PuTTY中的私钥。重新启动服务器也没有帮助。

我发现错误可以通过将密钥放在用户主文件夹之外的位置来解决,但这只有在主文件夹被加密时才有用,而这个文件夹不是。

还尝试生成一个4096位密钥,可能认为1024太短了。

我怎样才能让它发挥作用?谢谢!

编辑:

好的,/var/log/auth.log说:

sshd: Authentication refused: bad ownership or modes for directory /home/vorkbaard/.ssh

谷歌告诉我~/.ssh/应该是700,而~/.ssh/authorized_keys应该是600,所以我这样做了。现在/var/log/auth.log说:

sshd: error: key_read: uudecode AAAAB3N [etc etc etc until about 3/4 of my public key]

最佳解决方法

好的,它是固定的,但我不知道这与我尝试过的有什么不同。

我做了什么:

  • 使用puttygen.exe生成密钥对(长度:1024位)

  • 在PuTTY配置文件中加载私钥

  • 在一行中输入~/.ssh/authorized_keys中的公钥(需要以ssh-rsa开头)

  • chmod 700 ~/.ssh

  • chmod 600 ~/.ssh/authorized_keys

  • chown $USER:$USER ~/.ssh -R

  • 改变/etc/ssh/sshd_config所以它包含AuthorizedKeysFile %h/.ssh/authorized_keys

  • sudo service ssh restart

要进行故障排除,请执行# tail -f /var/log/auth.log

谢谢你的帮助!

次佳解决方法

我刚遇到这个问题。尽管配置设置正确,如此线程中已经提到的(authorized_keys上的权限等),但事实证明我的公钥格式错误。它的形式是:

---- BEGIN SSH2 PUBLIC KEY ----
Comment: "imported-openssh-key"
AAAAB3NzaC1yc2EAAAADAQABAAABAQDUoj0N3vuLpeviGvZTasGQ...
... lPmTrOfVTxI9wjax2JvKcyE0fiNMzXO7qiHJsQM9G9ZB4Lkf71kT
---- END SSH2 PUBLIC KEY ----

哪个不起作用。但是让它以下面的形式工作:

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDU.....j0N3vuLpeviGvZTasGQa1rcJiPXQMW7v3uurb+n94B9MQaaWR0odsg5DJQL92TNenOda5BO1nd08y6+sdLQmHXExTz6X8FzgoVsAkEl3RscxcxHUksiKA9JfTo38vQvG/bPxIHMCuSumCQVA1laf3rO/uOrkcB7iMWhaoi1/z6AbFtPzeh7xjGfInMWwtBI0CsHSRF73VWIxT26w0P+KjafCjSn/7vDO1bT8QHujSQelU/GqaVEvbbvPl1a7POVjKgHLNekolwRKfNeVEewcnmZaoqfHgOKlPmTrOfVTxI9wjax2JvKcyE0fiNMzXO7qiHJsQM9G9ZB4Lkf71kT UserName@HOSTNAME

第三种解决方法

问题是windows使用了不同于linux的新行,所以当把密钥从windows复制到linux时,在行的末尾有一个\ n \ n你在编辑器中无法在linux上看到。

如果您拖尾/var/log/auth.log并尝试登录,则错误如下:

sshd: error: key_read: uudecode AAAAB3N[….]==\n

如果您在Windows上更改密钥,使其在一行中没有新行,然后将其复制到Linux,它应该可以工作(为我做了诀窍)。

第四种方法

我不得不更改主目录的权限

chmod 700 ~

第五种方法

我必须将〜/.ssh目录权限从770更改为700,将〜/.ssh /authorized_keys文件权限从660更改为600。

出于某种原因,删除组权限为我解决了这个问题。

chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

第六种方法

~/.ssh/authorized_keys文件要求密钥全部在一行上。如果您在上面的粘贴中添加了多行,请尝试连接这些行。

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/2153.html,未经允许,请勿转载。