这个问题有一阵了, 一直不知道啥原因
检查了配置文件
%PROGRAMDATA%/ssh/sshd_config
里面
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
检查了在.ssh/authorized_keys 里面确实有我添加的公钥
用 debug 模式运行 sshd, output 如下:
debug1: trying public key file C:\\ProgramData\\ssh\\administrators_authorized_keys
Failed publickey for xxxxxxx
经检查, 根本就没有 C:\ProgramData\ssh\administrators_authorized_keys 这么个文件 我的公钥都在 .ssh/authorized_keys 里面.
那么是什么导致 OpenSSH 去 administrators_authorized_keys 里面找公钥呢?
翻到 sshd_config 这个配置文件的最下面, 发现有这么两行:
Match Group administrators
AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys
直接注释掉:
#Match Group administrators
# AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys
重启 sshd 服务 再试试 ssh, 这次没有提示要输 password 而是直接用密钥登录了, 问题解决.
PS: openssh 默认连进去是 cmd 而不是 powershell 可以把 default shell 改成 powershell 方便之后的操作 powershell 下运行:
New-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" -Name DefaultShell -Value "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -PropertyType String -Force
重启 sshd 服务, 这下直接连进去就是 powershell 了
1
Mitt 2022-06-16 15:23:20 +08:00
所以你是本地 adminstrator 账户吗
|
3
xyfan 2022-06-16 19:36:11 +08:00
管理员账户的 key 就应该放在 administrators_authorized_keys 文件里,至少微软官方文档是这样说明的
“Note that if the user belongs to the administrator group, %programdata%/ssh/administrators_authorized_keys is used instead.” https://docs.microsoft.com/en-us/windows-server/administration/openssh/openssh_server_configuration#authorizedkeysfile “The contents of your public key (~\.ssh\id_ed25519.pub) needs to be placed on the server into a text file called administrators_authorized_keys in C:\ProgramData\ssh\.” https://docs.microsoft.com/en-us/windows-server/administration/openssh/openssh_keymanagement#administrative-user |
4
zx900930 OP @xyfan 这个设计出发点可以理解, 是为了安全性.
但是却和 ssh-copy-id 这样的 linux 命令行工具不兼容 默认 openssh 的公钥也是存在~/.ssh/authorized_keys 里的. 如果是防止普通用户越权连接 管理员的 profile/.ssh/authorized_keys 普通用户本来就无法访问, 也不能添加 key 进去. 普通用户的~/.ssh/authorized_keys 在它自己的 profile 里, 也无权限连接对应的 WSL 的管理员账户. 这个放在另外一个文件里的设计就是徒增麻烦, 实际并没有增加安全性. |