一个用户的SSH密钥失败

我只是build立了一个新的Debian服务器。 我禁用了根SSH和密码authentication,所以你必须使用密钥文件。

对于我的主要用户来说,一切都按预期工作。 我使用了ssh-keygen -t dsa并获得了公钥和私钥。 把一个放在授权密钥里,把另一个放在pem文件中。

我想创build一个用户,我可以部署的东西,所以我做了基本相同的过程。 我adduser编辑它,做了一个.ssh文件夹,运行ssh-keygen -t dsa (我也试过RSA),把钥匙放在适当的位置。

没有运气。 我得到一个Permission denied (publickey)错误。 当我使用完全相同的密钥作为帐户,同样的错误。 当我启用密码authentication时,我可以通过SSHlogin密码。

我如何debugging?

编辑

详细的SSH输出(deployer.pem是正确的键):

 debug2:key:/Users/eli/.ec2/deployer.pem(0x100126830)
 debug2:key:/Users/eli/.ec2/deployer.pem(0x100126b30)
 debug2:key:/Users/eli/.ec2/deployer.pem(0x0)
 debug1:可以继续的身份validation:publickey
 debug3:重新开始,传递一个不同的列表publickey
 debug3:首选公钥,键盘交互,密码
 debug3:authmethod_lookup publickey
 debug3:其余的首选项:键盘交互式,密码
 debug3:authmethod_is_enabled publickey
 debug1:下一个validation方法:publickey
 debug1:提供公钥:/Users/eli/.ssh/id_rsa
 debug3:send_pubkey_test
 debug2:我们发送了一个publickey包,等待回复
 debug1:可以继续的身份validation:publickey
 debug1:提供公钥:eli.pem
 debug3:send_pubkey_test
 debug2:我们发送了一个publickey包,等待回复
 debug1:可以继续的身份validation:publickey
 debug1:提供公钥:/Users/eli/.ec2/deployer.pem
 debug3:send_pubkey_test
 debug2:我们发送了一个publickey包,等待回复
 debug1:可以继续的身份validation:publickey
 debug1:提供公钥:/Users/eli/.ec2/deployer.pem
 debug3:send_pubkey_test
 debug2:我们发送了一个publickey包,等待回复
 debug1:可以继续的身份validation:publickey
 debug1:尝试私钥:/Users/eli/.ec2/deployer.pem
 debug1:读取完成的PEM私钥:键入DSA
 debug3:sign_and_send_pubkey
 debug2:我们发送了一个publickey包,等待回复
 debug1:可以继续的身份validation:publickey
 debug2:我们没有发送数据包,禁用方法
 debug1:没有更多的身份validation方法来尝试。
权限被拒绝(publickey)。

两部分:首先,debugging你的SSH服务器。 编辑/etc/ssh/sshd_config并将LogLevel增加为DEBUG。 然后强制你的ssh服务器用killall -HUP <sshd pid>重新加载它的configuration。

这将导致服务器将更多的细节添加到/var/log/secure和/或/var/log/auth日志文件中。

其次(实际上你不能先尝试这个),增加客户端的debugging级别。 ssh到箱子里

$ ssh -vvv hostname

这将打印出更多有关过程失败的信息。

如果你打开了你的ssh服务器上的debugging级别,不要忘了在完成时把它关掉。

你有没有检查关键文件的权限? .ssh/id_dsa文件应该是600,并由用户拥有。 运行ssh -v root@host来查看是否有问题。

如果用户的主目录,用户主目录下的.ssh目录或用户的authorized_keys文件可由除用户(组或其他用户)之外的任何人写入,则密钥validation将彻底失败,因为.ssh / authorized_keys文件不能更长的时间是可信的(因为另一个用户可以replace或修改它,从而以该用户身份login)。

尝试:

 chmod go-w ~USER ~USER/.ssh ~USER/.ssh/authorized_keys 

看看是否清除你的问题。

chown -R username. /home/username/.ssh

chmod 700 /home/username/.ssh

chmod 400 /home/username/.ssh/id_dsa /home/username/.ssh/id_dsa.pub

chmod 600 /home/username/.ssh/authorized_keys

这里有一些基于我尝试通过Pubkey身份validation(例如ssh rsa)获得ssh工作时遇到的问题的提示:

除了上面的提示(权限,-vvv)之外: – 在目标服务器上,通过passwd -S用户名或passwd -s用户名检查帐户信息。 输出看起来像[username] [stat] [pwchg] [min] [max] [warn]。 如果[stat]列显示LK,则需要解锁帐户passwd -u用户名。 如果[pwchg]date早于[max]天,则需要通过passwd -x 999或passwd用户名更改最大date或更改用户名的密码

例:

 # uname -n myserver # pwd /export/home/santac # ls -l .ssh -rw------- 1 santac users 796 Jul 8 00:27 authorized_keys # cat .ssh/authorized_keys ssh-rsa AAABBBCCCboogaboogaAAABBBCCCidonthinkyougetthatthisisbogusbutwhattheheck== santac@otherserv # date Wed Jul 8 00:55:10 GMT 2015 # passwd -S santac santac LK 03/05/14 7 60 10 (note stat is LK or locked) # passwd -u santac # passwd -S santac santac PS 03/05/14 7 60 10 (note [pwchg] date is older than 60 days) # passwd santac Enter New Password: Confirm New Password: # passwd -S santac santac PS 07/08/15 7 60 10 (all good now) FROM THE OTHER SERVER: # uname -n otherserv # pwd /export/home/santac # ls -l .ssh -rw------- 1 santa users 1675 Jul 6 20:23 id_rsa -rw------- 1 santa users 394 Jul 6 20:23 id_rsa.pub # cat .ssh/id_rsa.pub ssh-rsa AAABBBCCCboogaboogaAAABBBCCCidonthinkyougetthatthisisbogusbutwhattheheck== santac@otherserv LOOKS GOOD...