我刚刚设置了一个新的 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...