我尝试使用用户名和密码登录到我的 ssh 服务器,但是输入正确的密码后出现此错误:
Permission denied, please try again.
我能虽然我可以在另一台机器上使用公钥登录,但我没有禁用常规密码验证。我唯一禁用的是 root 登录。
这是我的 sshd_config 文件:
#打包生成配置文件 # 有关详细信息,请参阅 sshd_config(5) 手册页 # 我们监听哪些端口、IP 和协议 端口 22 # 使用这些选项来限制 sshd 将绑定到哪些接口/协议 #聆听地址 :: #监听地址 0.0.0.0 协议 2 # 协议版本 2 的 HostKeys 主机密钥 /etc/ssh/ssh_host_rsa_key 主机密钥 /etc/ssh/ssh_host_dsa_key 主机密钥 /etc/ssh/ssh_host_ecdsa_key #出于安全考虑,开启权限分离 UsePrivilegeSeparation 是 # 临时版本 1 服务器密钥的生命周期和大小 密钥再生间隔 3600 服务器密钥位 768 # 日志记录 Syslog 工具验证 日志级别信息 # 验证: 登录宽限时间 120 PermitRootLogin 否 StrictModes 是 RSA身份验证 是 公钥认证 是 #AuthorizedKeys文件 %h/.ssh/authorized_keys # 不要读取用户的 ~/.rhosts 和 ~/.shosts 文件 IgnoreRhosts 是 # 为了实现此功能,您还需要 /etc/ssh_known_hosts 中的主机密钥 RhostsRSAAuthentication 否 # 协议版本 2 类似 基于主机的身份验证 否 # 如果您不信任 RhostsRSAAuthentication 的 ~/.ssh/known_hosts,请取消注释 #IgnoreUserKnownHosts 是 # 要启用空密码,请更改为是(不推荐) 允许空密码 否 # 改为 yes 以启用质询-响应密码(注意 # 一些 PAM 模块和线程) ChallengeResponseAuthentication 否 # 更改为 no 以禁用隧道明文密码 密码验证 是 # Kerberos 选项 #KerberosAuthentication 否 #KerberosGetAFSToken 否 #KerberosOrLocalPasswd 是 #KerberosTicketCleanup 是 # GSSAPI 选项 #GSSAPIAuthentication 否 #GSSAPICleanupCredentials 是 X11转发 是 X11显示偏移 10 PrintMotd 号码 PrintLastLog 是 TCPKeepAlive 是 #UseLogin 没有 #MaxStartups 10:30:60 #横幅 /etc/issue.net # 允许客户端传递区域环境变量 接受环境语言 LC_* 子系统 sftp /usr/lib/openssh/sftp-server # 将其设置为“是”以启用 PAM 身份验证、帐户处理、 # 和会话处理。如果启用此功能,PAM 身份验证将 # 被允许通过 ChallengeResponseAuthentication 和 # PasswordAuthentication。根据您的 PAM 配置, # 通过 ChallengeResponseAuthentication 进行 PAM 身份验证可能会绕过 #“PermitRootLogin without-password”的设置。 # 如果你只希望运行 PAM 帐户和会话检查,而无需 # PAM 身份验证,然后启用此功能但设置 PasswordAuthentication # 并将 ChallengeResponseAuthentication 设置为‘否’。 UsePAM 是 IgnoreUserKnownHosts 否 密码验证 是
我最近添加了最后两行以使其正常工作。(我在其他 vps 上安装了它们,它们在那里工作正常)
以下是我的用户的 ~/.ssh/ 目录列表:
ls -la /home/skerit/.ssh 共 16 drwx------ 2 skerit skerit 4096 2011-06-25 15:11。 drwxr-xr-x 4 skerit skerit 4096 2011-07-07 21:05 .. -rw-r--r-- 1 密钥 密钥 1882 2011-06-25 15:15 authorized_keys -rw-r--r-- 1 skerit skerit 884 2011-06-23 22:59 known_hosts
这是 /usr/sbin/sshd -d 的输出:
debug1:用户 skerit 服务的用户身份验证请求 ssh 连接方法无 debug1:尝试 0 次,失败 0 debug1:PAM:正在初始化“skerit” debug1:PAM:将 PAM_RHOST 设置为“82.197.70.70” debug1:PAM:将 PAM_TTY 设置为“ssh” debug1:用户 skerit 服务的用户身份验证请求 ssh 连接方法 publickey debug1:尝试 1 失败 0 debug1:测试pkalg/pkblob是否可以接受 debug1:检查黑名单文件 /usr/share/ssh/blacklist.RSA-2048 debug1:检查黑名单文件 /etc/ssh/blacklist.RSA-2048 调试1:暂时使用uid:1000/1000(e=0/0) debug1:尝试公钥文件 /home/skerit/.ssh/authorized_keys debug1:fd 4 清除 O_NONBLOCK 调试1:restore_uid:0/0 调试1:暂时使用uid:1000/1000(e=0/0) debug1:尝试公钥文件 /home/skerit/.ssh/authorized_keys2 debug1:无法打开授权密钥“/home/skerit/.ssh/authorized_keys2”:没有此文件或目录 调试1:restore_uid:0/0 来自 82.197.70.70 端口 57154 ssh2 的 skerit 公钥失败 debug1:用户 skerit 服务的用户身份验证请求 ssh 连接方法密码 debug1:尝试2失败1 debug1:PAM:skerit 密码验证失败:验证失败 来自 82.197.70.70 端口 57154 ssh2 的 skerit 密码失败
然后我尝试使用相同的用户名和密码从 ssh 服务器(本地)登录到 ssh 服务器,成功了。这是在 auth.log 文件中:
7 月 8 日 12:21:50 vpsnl1 sshd[27298]: debug1: 无法打开密钥文件‘/etc/ssh/ssh_host_ecdsa_key’: 没有此文件或目录 7 月 8 日 12:21:50 vpsnl1 sshd[27298]: 错误:无法加载主机密钥:/etc/ssh/ssh_host_ecdsa_key 7 月 8 日 12:22:16 vpsnl1 sshd[27298]: pam_unix(sshd:auth): 身份验证失败;logname= uid=0 euid=0 tty=ssh ruser= rhost=82.197.70.70 user= 斯凯里特 7 月 8 日 12:23:50 vpsnl1 sshd[27439]: 服务器正在监听 0.0.0.0 端口 22。 7 月 8 日 12:23:50 vpsnl1 sshd[27439]: 服务器正在监听::端口 22。 7 月 8 日 12:24:07 vpsnl1 sshd[27458]: 错误:无法加载主机密钥:/etc/ssh/ssh_host_ecdsa_key 7 月 8 日 12:24:14 vpsnl1 sshd[27458]: 已接受来自 127.0.0.1 端口 57667 ssh2 的 skerit 密码 7 月 8 日 12:24:14 vpsnl1 sshd[27458]: pam_unix(sshd:session): 会话由 (uid=0) 为用户 skerit 打开 7 月 8 日 12:24:25 vpsnl1 sshd[27471]: 收到来自 127.0.0.1 的断开连接:11: 用户断开连接 7 月 8 日 12:24:25 vpsnl1 sshd[27458]: pam_unix(sshd:session): 用户 skerit 的会话已关闭
答案1
您确定尝试访问的用户帐户配置正确吗?如果您以 root 身份登录系统,是否可以su
访问该用户帐户?
# su - username
连接尝试失败后,您在日志中看到了什么?在许多系统上,sshd 会记录到某个内容/var/log/secure
或/var/log/auth.log
。另外,我注意到您已PasswordAuthentication
启用但ChallengeResponseAuthentication
已禁用。如果启用,是否会看到相同的行为ChallengeResponseAuthentication
?
当您遇到 ssh 问题时,可以使用以下一些常规诊断步骤:
在 ssh 中启用详细诊断:
ssh -v host.example.com
这将导致客户端在协商连接时输出各种诊断消息。这通常会提供问题的线索。
以调试模式运行服务器。
在您的服务器上,停止 sshd,然后从命令行运行它,如下所示:
/usr/sbin/sshd -d
这将生成详细的调试日志
stderr
,其中通常包含有用的信息。
如果这些都不能帮助您弄清楚发生了什么,您会将输出添加到您的问题中吗?