openssh 设置免密登录后仍要输入密码的问题排查

背景

手中一台windows 11的主机A有设置SSH免密登录,但每次连接它时依然要输入密码。因为A的使用频率较高,故每次输入密码显得麻烦。今日抽空排查解决。记录一下。

排查思路

1,先确认免密登录的相关设置是否正确。

1.1 确认客户机B的publickey是否有添加到主机A的.ssh/authorized_keys中。

1.2 确认主机A的C:\ProgramData\ssh\sshd_config 关键配置项如下。

PubkeyAuthentication yes
AuthorizedKeysFile    .ssh/authorized_keys

#Match Group administrators
#       AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys

修改后重启sshd服务再尝试,依然要输入密码。

2,采用比对思路。B用同样的设置(B也是同样的OS),从A连接B,却可实现免密登录。用beyondcompare比较A&B主要的配置文档,并无发现不同。索性将B的配置文档全部覆盖到A。重启sshd后B连接A时还是要输入。

这就有点奇怪了。

3,尝试将A的openssd 卸载后重新安装,问题依然不变。

4,搜索了一通并未发现有价值的线索。转念一想,既然每次都要输入,那在配置文档中禁止密码登录又会如何。将配置文档中的PasswordAuthentication改为no(默认为yes)。重连时报错,报错信息如下:

Permission denied (publickey,keyboard-interactive)

据此消息再搜索一通,总算发现有价值的东西:

Windows 10 启用 SSH server 配置 SSH 证书 密钥 免密 登录 Windows 及 错误 1607 Permission denied 要求输入密码 记录 - 雨的泪 - 有谁能懂

从此文获得启发,将strictmodes 改为no(默认为yes)。重新连接,终于不用输入密码了。

根因分析

虽然问题貌似解决,但主机B上的strictmodes为yes却可以免密登录,说明肯定另有原因。继续分析。查找官方对strictmodes的解释:

Get started with OpenSSH | Microsoft DocsInstalling OpenSSH Client and Server for Windows.icon-default.png?t=M276https://docs.microsoft.com/en-us/windows-server/administration/openssh/openssh_install_firstusesshd_config(5) - OpenBSD manual pagesicon-default.png?t=M276https://man.openbsd.org/sshd_config

解释如下: 

Specifies whether sshd(8) should check file modes and ownership of the user's files and home directory before accepting login. This is normally desirable because novices sometimes accidentally leave their directory or files world-writable. The default is yes. Note that this does not apply to ChrootDirectory, whose permissions and ownership are checked unconditionally.

 既然如此,那就查看.ssh目录的权限(属性->安全),果然多了一些其他账号可写。

注:对照主机B,.ssh"正常"的可写账号有:SYSTEM,用户账号,以及administrators群组。

将多余的账号全部砍掉。然后将strictmodes依然改回yes。重启下sshd服务。再连,终于也是无需输入密码。

总结

1,.ssh之所以出现其他账号可写,根源产生于这个问题的处理过程中:windows安装后默认采用微软账号登录,自动生成的用户文档目录被截断为5个字符。将其手动修改为全名。但是文档目录名并未自动跟随变化。为此进行了一系列的处理过操作。在此过程中产生了临时账号,也新建了其他账号等。导致了用户账号下的.ssh目录写权限账号增加。

2,改windows登录账户文件夹的过程也是个坑。希望windows以后能更智能些。改了用户名,文件夹的名字、注册表、环境变量等也能自动跟随变化。

你可能感兴趣的:(运维,运维)