某个用户的 SSH 密钥失败

某个用户的 SSH 密钥失败

我刚刚设置了一个新的 Debian 服务器。我禁用了 root SSH 和密码验证,因此您必须使用密钥文件。

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

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

运气不好。我遇到了Permission denied (publickey)错误。当我使用与有效帐户完全相同的密钥时,也会出现同样的错误。当我启用密码验证时,我可以使用密码通过 SSH 登录。

我该如何调试这个?

编辑

详细的 ssh 输出(deployer.pem 是正确的密钥):

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

答案1

分为两部分:首先,打开 ssh 服务器上的调试。编辑/etc/ssh/sshd_config并将 LogLevel 增加到 DEBUG。然后强制 ssh 服务器使用 重新加载其配置killall -HUP <sshd pid>

这将导致服务器向您/var/log/secure和/或/var/log/auth日志文件添加更多详细信息。

其次(实际上你不能先尝试这个),增加客户端的调试级别。使用 ssh 进入框

$ ssh -vvv hostname

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

如果您确实在 ssh 服务器上提高了调试级别,请不要忘记在完成后将其调低。

答案2

您是否检查过密钥文件的权限?该.ssh/id_dsa文件的权限应为 600,且归用户所有。运行ssh -v root@host以查看是否是此问题。

答案3

如果用户的主目录、用户主目录下的 .ssh 目录或用户的 authorized_keys 文件可由用户以外的任何人(组或其他)写入,则密钥认证将彻底失败,因为 .ssh/authorized_keys 文件不再受信任(因为另一个用户可以替换或修改它,从而以该用户身份登录)。

尝试:

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

看看是否能解决你的问题。

答案4

以下是根据我在尝试通过公钥身份验证(即 ssh rsa)使 ssh 工作时遇到的问题提出的一些提示:

除了上述提示(权限,-vvv): - 在目标服务器上,通过 passwd -S username 或 passwd -s username 检查帐户信息。输出将类似于 [username][stat][pwchg][min][max][warn]。如果 [stat] 列显示 LK,则需要解锁帐户 passwd -u username。如果 [pwchg] 日期早于 [max] 天,则需要更改最大天数或通过 passwd -x 999 或 passwd username 更改 username 上的密码

例子:

# 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...

相关内容