问题描述
我正在尝试使用密钥文件而不是用户名/密码来设置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
文件要求密钥全部在一行上。如果您在上面的粘贴中添加了多行,请尝试连接这些行。