Win11 开启 SSH 服务器与密钥登录配置记录

1. 场景说明

目标:让其他电脑通过 SSH 连接这台 Win11 主机。

Win11 主机用户名示例:

复制代码
IV01

Win11 用户目录示例:

复制代码
C:\Users\IV01

SSH 默认目录:

复制代码
C:\Users\IV01\.ssh

2. 生成 SSH 密钥

在 PowerShell 中执行:

复制代码
ssh-keygen -t ed25519 -C "IV01"

参数说明:

复制代码
-t ed25519    指定生成 ed25519 类型密钥
-C "IV01"     给公钥添加备注,方便识别

推荐直接保存到默认路径:

复制代码
C:\Users\IV01\.ssh\id_ed25519

如果手动输入了名字,例如:

复制代码
iv123456

则会生成:

复制代码
C:\Users\IV01\iv123456
C:\Users\IV01\iv123456.pub

建议移动到 .ssh 目录:

复制代码
mkdir C:\Users\IV01\.ssh -Force

move C:\Users\IV01\iv123456 C:\Users\IV01\.ssh\iv123456
move C:\Users\IV01\iv123456.pub C:\Users\IV01\.ssh\iv123456.pub

文件说明:

复制代码
iv123456       私钥,客户端使用,不能泄露
iv123456.pub   公钥,放到被连接的服务器上

3. 安装 OpenSSH Server

检查 Win11 是否安装 OpenSSH Server:

复制代码
Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH.Server*'

如果显示:

复制代码
State : Installed

说明已安装。

如果没有安装,使用管理员 PowerShell 执行:

复制代码
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0

4. 启动 SSH 服务

使用管理员 PowerShell 执行:

复制代码
Start-Service sshd
Set-Service -Name sshd -StartupType Automatic

检查服务状态:

复制代码
Get-Service sshd

正常应该看到:

复制代码
Status   Name
Running  sshd

5. 放行防火墙端口

SSH 默认端口是 22。

使用管理员 PowerShell 执行:

复制代码
New-NetFirewallRule `
  -Name sshd `
  -DisplayName "OpenSSH Server" `
  -Enabled True `
  -Direction Inbound `
  -Protocol TCP `
  -Action Allow `
  -LocalPort 22

如果提示规则已经存在,可以忽略。


6. 普通用户的公钥配置

如果被连接的 Win11 用户不是管理员账户,通常把公钥写入:

复制代码
C:\Users\IV01\.ssh\authorized_keys

命令:

复制代码
mkdir C:\Users\IV01\.ssh -Force

type C:\Users\IV01\.ssh\iv123456.pub >> C:\Users\IV01\.ssh\authorized_keys

然后测试:

复制代码
ssh -i C:\Users\IV01\.ssh\iv123456 IV01@127.0.0.1

7. Win11 管理员账户的关键坑

如果登录用户属于 Windows 管理员组,例如 IV01 是管理员账户,那么 OpenSSH Server 可能不会读取:

复制代码
C:\Users\IV01\.ssh\authorized_keys

而是读取:

复制代码
C:\ProgramData\ssh\administrators_authorized_keys

这是 Win11 OpenSSH 最容易踩坑的地方。

7.1 确认用户是否是管理员

执行:

复制代码
net localgroup administrators

如果列表中有:

复制代码
IV01

说明该用户是管理员账户。


7.2 管理员账户正确配置方式

使用管理员 PowerShell 执行:

复制代码
mkdir C:\ProgramData\ssh -Force

Get-Content C:\Users\IV01\.ssh\iv123456.pub |
Out-File -Encoding ascii -Append C:\ProgramData\ssh\administrators_authorized_keys

设置权限:

复制代码
icacls C:\ProgramData\ssh\administrators_authorized_keys /inheritance:r

icacls C:\ProgramData\ssh\administrators_authorized_keys /grant "Administrators:F" /grant "SYSTEM:F"

重启 SSH 服务:

复制代码
Restart-Service sshd

再次测试:

复制代码
ssh -i C:\Users\IV01\.ssh\iv123456 IV01@127.0.0.1

8. 检查 sshd_config 配置

配置文件路径:

复制代码
C:\ProgramData\ssh\sshd_config

打开:

复制代码
notepad C:\ProgramData\ssh\sshd_config

重点检查:

复制代码
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys

如果存在下面这段:

复制代码
Match Group administrators
       AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys

说明管理员组用户会走:

复制代码
C:\ProgramData\ssh\administrators_authorized_keys

修改配置后需要重启服务:

复制代码
Restart-Service sshd

9. 本机测试 SSH 是否成功

在 Win11 服务器本机执行:

复制代码
ssh -i C:\Users\IV01\.ssh\iv123456 IV01@127.0.0.1

如果不再要求输入 Windows 密码,而是直接登录成功,说明密钥认证已生效。

如果仍然出现:

复制代码
IV01@127.0.0.1's password:
Permission denied, please try again.

说明 SSH 服务是通的,但密钥没有被服务器接受。


10. 用详细日志排查

执行:

复制代码
ssh -vvv -i C:\Users\IV01\.ssh\iv123456 IV01@127.0.0.1

关键日志:

复制代码
Offering public key: C:\\Users\\IV01\\.ssh\\iv123456

如果后面没有:

复制代码
Server accepts key

而是出现:

复制代码
Next authentication method: password

说明服务器拒绝了这个公钥。

常见原因:

复制代码
1. 公钥没有写入 authorized_keys
2. 当前用户是管理员账户,但公钥没有写入 administrators_authorized_keys
3. administrators_authorized_keys 权限不正确
4. sshd_config 配置没有启用公钥认证
5. 修改配置后没有重启 sshd

11. 其他电脑连接这台 Win11

先在 Win11 服务器上查询 IP:

复制代码
ipconfig

找到 IPv4 地址,例如:

复制代码
192.168.1.123

其他电脑连接:

复制代码
ssh IV01@192.168.1.123

如果客户端需要指定私钥:

复制代码
ssh -i C:\Users\客户端用户名\.ssh\你的私钥 IV01@192.168.1.123

注意:

复制代码
客户端使用私钥
服务器保存公钥

12. 私钥和公钥的关系

私钥:

复制代码
C:\Users\IV01\.ssh\iv123456

用途:

复制代码
客户端拿它去连接服务器
不能泄露
不能发给别人
不能上传到网页

公钥:

复制代码
C:\Users\IV01\.ssh\iv123456.pub

用途:

复制代码
放到服务器 authorized_keys 或 administrators_authorized_keys 里面
可以给服务器保存

13. 推荐的最终目录结构

复制代码
C:\Users\IV01\.ssh\

里面可以有:

复制代码
iv123456
iv123456.pub
authorized_keys
known_hosts

如果 IV01 是管理员账户,还需要:

复制代码
C:\ProgramData\ssh\administrators_authorized_keys

14. 最终结论

Win11 作为 SSH 服务器时,流程是:

复制代码
1. 安装 OpenSSH Server
2. 启动 sshd 服务
3. 放行防火墙 22 端口
4. 生成 SSH 密钥
5. 把客户端公钥写入服务器的 authorized_keys
6. 如果登录用户是管理员账户,把公钥写入 C:\ProgramData\ssh\administrators_authorized_keys
7. 设置 administrators_authorized_keys 权限
8. 重启 sshd
9. 使用 ssh -i 私钥 用户名@主机IP 测试连接

最重要的坑:

复制代码
Win11 管理员账户通常需要使用:
C:\ProgramData\ssh\administrators_authorized_keys

而不是只使用:
C:\Users\用户名\.ssh\authorized_keys
相关推荐
土拨鼠烧电路1 小时前
第4章:寄生虫时代——当AI学会呼吸
人工智能·microsoft
utf8mb4安全女神1 小时前
磁盘管理(交换分区)(MGR分区)(GPT分区)
linux·运维·服务器
humors2212 小时前
聊聊密码为啥会“白设”
大数据·运维·服务器·网络·网络安全
2301_777998342 小时前
进程控制:进程创建、进程终止、进程等待、进程程序替换
linux·服务器
kongba0072 小时前
双轨终端监视系统部署手册tmux + ttyd 实时 SSH 操作可视化方案
运维·ssh
为思念酝酿的痛2 小时前
线程同步与互斥
linux·运维·服务器·后端
土星云SaturnCloud2 小时前
模型转换与部署实战(PyTorch→ONNX→BModel)
服务器·人工智能·ai·边缘计算
一条代码鱼2 小时前
Linux 文件实时同步完全指南:Lsyncd vs Inotifywait+Rsync
linux·运维·服务器
艾莉丝努力练剑2 小时前
【Linux网络】Linux 网络编程:传输层协议TCP(三)
linux·运维·服务器·网络·tcp/ip·http