1.介绍
SSH(Secure Shell)是一种加密的网络协议,用于安全地远程连接到服务器或其他计算设备。它提供了加密的通信信道,以防止敏感信息被窃听或篡改。SSH支持多种身份验证方法,其中之一是密码身份验证。
密码登录是最常见的身份验证方法之一,用户通过输入用户名和密码来进行身份验证。然而,有时候会遇到密码登录失败的问题,导致无法成功连接到目标主机。密码登录问题可能由多种原因引起,包括密码错误、配置问题、认证优先级设置等。
密码登录问题的背景和常见原因 密码登录问题可能出现在以下情况下:
2.检查密码和配置
2.1确认密码是否输入正确
确认输入的密码与目标主机上的密码一致。是否存在拼写错误导致的密码登录失败。
注意区分大小写,并确保没有多余的空格或特殊字符。
可以使用su+用户名
,确认密码是否正确。
2.2查看sshd_config文件配置是否开启
SSH服务器的配置文件通常是 /etc/ssh/sshd_config
。
查看配置 PasswordAuthentication
是否为yes
,以启用密码身份验证。如果该行被注释掉(以 # 开头),则将其取消注释并将值设置为 yes。
保存文件并重新启动SSH服务,以使更改生效。、
2.3其他配置文件
/etc/pam.d/sshd
,它定义了SSH服务器使用的PAM(Pluggable Authentication Modules)配置。
使用文本编辑器打开该文件,并检查是否有关于密码身份验证的配置项。
找台其他相同版本的服务器,使用md5sum
命令查看md5是否一致,如果不一致,确认是否存在配置被篡改的可能。
3.检查公钥认证和优先级
查看配置文件/etc/ssh/sshd_config
文件,确保 PasswordAuthentication
选项的值设置为 yes
,以启用密码身份验证。
可能还需要注释掉PubkeyAuthentication
选项,以禁用公钥身份验证。
保存文件并重新启动SSH服务,再次验证SSH是否可以正确使用密码服务。
可以使用命令,指定使用密码登录:
ssh -o PreferredAuthentications=password username@hostname
4.检查其他认证相关数值
检查/etc/ssh/sshd_config文件中是否配置PermitRootLogin
,将其修改为yes后,重启sshd服务,确保开启限制root登录。
5.权限问题
检查下面所有文件的权限
/etc/ssh/sshd_config
/etc/ssh/ssh_config
> 注意:上述的两个文件不是一个,请核对前确认文件名称
/etc/ssh/ssh_host_rsa_key
/etc/ssh/ssh_host_dsa_key
/etc/ssh/ssh_host_ecdsa_key
/etc/ssh/ssh_host_ed25519_key
~/.ssh/authorized_keys
/var/run/sshd.pid
/etc/pam.d/sshd
/etc/hosts.allow 和 /etc/hosts.deny
6.查看系统日志
- /var/log/auth.log:这是最常见的SSH服务日志文件之一,记录了与身份验证、连接和会话相关的信息,包括成功或失败的登录尝试、使用的认证方法、连接的来源IP地址等。
- /var/log/secure:在一些Linux发行版中,SSH服务的日志可能会被记录在此文件中。它包含了与安全相关的信息,包括SSH服务的活动。
注意:上述2个文件并非所有系统都具备,请确认操作系统后确认。
- /var/log/messages:这是另一个可能包含SSH服务日志的常见位置。它是系统的主要日志文件,记录了各种系统级别的消息,包括SSH服务的相关信息。
7.debug方法
使用 -vvv
参数查看详细的SSH连接日志:ssh -vvv username@hostname
检查 SSH 客户端和服务器的版本兼容性
除此之外,也需要确认OpenSSH版本,
命令:ssh -V