ssh免密码登录 windows

老刘

SSH免密码登录 Windows:从原理到实操,一篇讲透

关键词

ssh免密码登录 Windows

一、问题分析

很多人说“SSH 免密码登录”,其实指的是:
客户端用密钥认证登录 Windows 电脑时,不再每次输入账户密码
这套方法常用于:

  • 远程管理 Windows 服务器
  • 用 Linux / MACOS 电脑连接 Windows
  • 自动化脚本批量执行命令
  • 家庭局域网内远程运维

和传统“账号 + 密码”登录相比,SSH 密钥登录更安全,也更方便
因为密钥是一对文件:

  • 公钥:放在 Windows 端
  • 私钥:保存在你自己的电脑上

登录时,SSH 服务端会验证你是不是持有对应私钥的人。
只要配置正确,后面连接 Windows 就不用再输入密码了。


二、适用场景

1. Windows 开启 OpenSSH Server

比如你的 Windows 10 / Windows 11 / Windows Server 需要接受 SSH 远程连接。

2. Linux / macOS 连接 Windows

例如你在 Ubuntu、CentOS、Mac 上,用 ssh 命令远程进 Windows。

3. Windows 连接 Windows

两台 Windows 电脑之间也可以通过密钥实现免密登录。


三、前置条件

在开始之前,先确认这几件事:

1. Windows 版本

建议使用:

  • Windows 10 1809 及以上
  • Windows 11
  • Windows Server 2019 / 2022

这些版本一般都能直接安装 OpenSSH Server

2. 需要管理员权限

安装服务、修改配置、设置权限,通常都要管理员权限。

3. 确认网络可达

两台设备必须能互相访问:

  • 同一局域网
  • 或者已经打通公网/内网穿透/VPN

4. 记住 Windows 登录账户名

后面配置时会用到,比如:

  • Administrator
  • test
  • User01

四、Windows 端安装 SSH 服务

方法一:图形界面安装

这是最适合小白的方法。

操作步骤

  1. 打开 设置
  2. 进入 应用
  3. 点击 可选功能
  4. 选择 添加可选功能
  5. 找到并安装:
    • OpenSSH Server
    • (可选)OpenSSH Client

安装完成后,继续下一步。


方法二:PowerShell 安装

如果你习惯命令行,可以直接执行:

Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0

安装完成后,启动服务:

Start-Service sshd
Set-Service -Name sshd -StartupType Automatic

检查服务状态:

Get-Service sshd

如果显示 Running,说明 SSH 服务已经启动。


五、确认 Windows 防火墙放行 22 端口

SSH 默认使用 22 端口
如果防火墙没放行,外部机器根本连不上。

PowerShell 放行命令

New-NetFirewallRule -Name sshd -DisplayName "OpenSSH Server (sshd)" -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22

检查是否监听成功

netstat -ano | findstr :22

如果看到类似 LISTENING,说明 SSH 正在监听 22 端口。


六、生成 SSH 密钥

SSH 免密登录的核心,就是密钥对。

方式一:在 Linux / macOS 生成

打开终端,执行:

ssh-keygen -t ed25519 -C "yourname"

然后一路回车即可。
如果你想更稳妥,也可以用:

ssh-keygen -t rsa -b 4096

生成后,默认会得到:

  • 私钥:~/.ssh/id_ed25519id_rsa
  • 公钥:~/.ssh/id_ed25519.pubid_rsa.pub

方式二:在 Windows 本机生成

如果你是在 Windows 客户端上发起连接,也可以在 PowerShell 中执行:

ssh-keygen -t ed25519 -C "yourname"

生成位置一般在:

C:\Users\你的用户名\.ssh\

七、把公钥放到 Windows 的授权位置

这是最关键的一步。
Windows 的 OpenSSH Server 会读取一个授权公钥文件,常见位置有两个:

1. 当前用户级别

适合普通账户登录:

C:\Users\用户名\.ssh\authorized_keys

2. 系统级别

适合管理员登录或多用户环境:

C:\ProgramData\ssh\administrators_authorized_keys

八、普通用户实现免密码登录

如果你是普通账户登录 Windows,按下面操作。

第一步:找到你的公钥内容

在客户端电脑上打开 .pub 文件,例如:

cat ~/.ssh/id_ed25519.pub

复制整行内容,类似这样:

ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAI... yourname

第二步:在 Windows 上创建 .ssh 文件夹

登录到 Windows 目标机器,执行 PowerShell:

mkdir C:\Users\用户名\.ssh

第三步:创建 authorized_keys 文件

打开记事本,把公钥粘贴进去,保存为:

C:\Users\用户名\.ssh\authorized_keys

注意:

  • 文件名必须是 authorized_keys
  • 不要加 .txt
  • 内容只能是一行或多行公钥

九、管理员账户实现免密码登录

如果你是用 Windows 的管理员账号登录,推荐使用这个方案。

第一步:把公钥写入管理员授权文件

在 Windows 上执行:

notepad C:\ProgramData\ssh\administrators_authorized_keys

把公钥粘进去保存。

第二步:设置正确权限

权限不对,SSH 会直接拒绝密钥登录。
执行下面命令:

icacls C:\ProgramData\ssh\administrators_authorized_keys /inheritance:r
icacls C:\ProgramData\ssh\administrators_authorized_keys /grant administrators:F
icacls C:\ProgramData\ssh\administrators_authorized_keys /grant SYSTEM:F

如果是用户级 authorized_keys,也要确保权限干净,至少不要让权限过于开放。


十、修改 Windows SSH 配置文件

SSH Server 的配置文件一般在:

C:\ProgramData\ssh\sshd_config

打开后,确认这些配置项存在并启用:

PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys

如果你使用的是管理员授权文件,可以保留默认行为,一般会自动识别:

Match Group administrators
    AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys

修改后重启 SSH 服务

Restart-Service sshd

或者:

net stop sshd
net start sshd

十一、从客户端测试登录

在客户端电脑上执行:

ssh 用户名@Windows_IP地址

例如:

ssh test@192.168.1.100

如果一切正常,第一次可能会提示确认主机指纹:

Are you sure you want to continue connecting (yes/no/[fingerprint])?

输入:

yes

之后如果密钥配置正确,就会直接登录,不再要求输入密码。


十二、如果还是要密码,怎么排查

这是最常见的问题。
明明已经放了公钥,但登录时还是要密码,通常是下面几个原因。

1. 公钥内容复制错了

常见错误:

  • 少复制了一部分
  • 多复制了换行
  • .pub 文件内容复制成乱码
  • 公钥格式被改坏

正确格式必须像这样:

ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIxxxxxx user@host

2. authorized_keys 文件名不对

要确保是:

authorized_keys

不是:

authorized_keys.txt

Windows 默认会隐藏扩展名,新手最容易踩坑。


3. 权限不正确

OpenSSH 对权限很敏感。
如果文件权限太宽松,SSH 会直接忽略它。

你可以检查:

icacls C:\Users\用户名\.ssh\authorized_keys

建议让文件只给当前用户和系统必要权限。


4. sshd_config 没启用密钥登录

确认:

PubkeyAuthentication yes

没有被注释掉。


5. 连接用户名写错

SSH 登录时的用户名,必须是 Windows 上真实存在的账户名。
比如你在 Windows 上是 Admin01,连接时也要写:

ssh Admin01@192.168.1.100

6. 你连的是管理员账户,但放错位置

如果是管理员组账户,很多人把公钥写到:

C:\Users\用户名\.ssh\authorized_keys

但系统实际读取的是:

C:\ProgramData\ssh\administrators_authorized_keys

这个地方最容易出错。


十三、建议开启的安全优化

SSH 免密登录虽然方便,但也要注意安全。

1. 禁止密码登录,只保留密钥

如果你确认密钥可用,可以进一步提高安全性。

sshd_config 中设置:

PasswordAuthentication no

这样就只能用密钥登录,不能再暴力猜密码。


2. 修改默认 22 端口

虽然不是必须,但能减少被扫描的概率。
例如改成:

Port 2222

然后记得同步放行防火墙。

连接时要写:

ssh -p 2222 用户名@IP

3. 只给必要用户开 SSH

别把所有账户都暴露给 SSH。
只保留管理账号即可,减少风险。


4. 定期备份密钥

私钥丢了,就没法免密登录了。
建议备份到安全位置,比如:

  • 加密 U 盘
  • 密码管理器
  • 离线备份盘

十四、常见故障处理

1. 提示 “Permission denied (publickey)”

说明公钥认证失败。

排查顺序:

  1. 检查用户名是否正确
  2. 检查公钥是否写入正确位置
  3. 检查 authorized_keys 文件名
  4. 检查权限
  5. 检查 sshd_config 是否启用 PubkeyAuthentication yes
  6. 重启 sshd 服务

2. 连不上 22 端口

先在 Windows 上执行:

netstat -ano | findstr :22

再检查防火墙:

Get-NetFirewallRule -Name sshd

如果规则没开,就重新添加。


3. 一直提示输入密码

大概率是:

  • 客户端没用对应私钥
  • ssh-agent 没加载密钥
  • 服务器没识别公钥

可以强制指定私钥测试:

ssh -i ~/.ssh/id_ed25519 用户名@Windows_IP

4. 连接后是黑屏,没法输入

有些 Windows 环境在远程 SSH 下默认 shell 异常。
可以检查默认 shell 配置,必要时恢复为 cmd.exe 或 PowerShell。

查看默认 shell:

reg query HKLM\SOFTWARE\OpenSSH /v DefaultShell

设置为 PowerShell 示例:

reg add HKLM\SOFTWARE\OpenSSH /v DefaultShell /t REG_SZ /d "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" /f

然后重启 SSH 服务:

Restart-Service sshd

十五、一个完整的实战示例

假设你有一台 Windows 11 电脑,IP192.168.1.100,用户名是 test,想让 Ubuntu 电脑免密登录它。

1. Windows 上安装并启动 SSH

Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
Start-Service sshd
Set-Service -Name sshd -StartupType Automatic

2. 放行防火墙

New-NetFirewallRule -Name sshd -DisplayName "OpenSSH Server (sshd)" -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22

3. Ubuntu 上生成密钥

ssh-keygen -t ed25519

4. 查看公钥

cat ~/.ssh/id_ed25519.pub

5. 把公钥写入 Windows

保存到:

C:\Users\test\.ssh\authorized_keys

6. 测试连接

ssh test@192.168.1.100

如果成功,后续就不需要再输入 Windows 密码了。


十六、进阶方案:多台机器批量管理

如果你有多台 Windows 机器,建议这样规划:

  • 每台机器单独一个账户
  • 每台机器单独一个 authorized_keys
  • 公钥统一由管理员保管
  • 禁用密码登录
  • 修改默认端口
  • 配合 VPN 或内网穿透使用

这样安全性更高,也方便后期维护。


十七、总结

SSH 免密码登录 Windows 的核心逻辑其实很简单:

  1. Windows 安装并开启 OpenSSH Server
  2. 客户端生成密钥对
  3. 把公钥放到 Windows 的授权文件里
  4. 配好权限和防火墙
  5. ssh 用户名@IP 测试连接

只要步骤没错,后面登录就会非常省事。
对于日常远程管理、脚本自动化、服务器维护来说,这套方案比传统密码登录更稳、更安全,也更专业。


十八、最简命令汇总

Windows 安装 SSH Server

Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
Start-Service sshd
Set-Service -Name sshd -StartupType Automatic

放行防火墙

New-NetFirewallRule -Name sshd -DisplayName "OpenSSH Server (sshd)" -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22

客户端生成密钥

ssh-keygen -t ed25519

连接 Windows

ssh 用户名@Windows_IP

指定密钥连接

ssh -i ~/.ssh/id_ed25519 用户名@Windows_IP
文章版权声明:文章内容均来源于各大短视频平台搜集以及修改和删减新增,如有侵权或者违规,请联系站长进行删除,如需转载或复制请以超链接形式并注明出处。

发表评论

快捷回复: 表情:
AddoilApplauseBadlaughBombCoffeeFabulousFacepalmFecesFrownHeyhaInsidiousKeepFightingNoProbPigHeadShockedSinistersmileSlapSocialSweatTolaughWatermelonWittyWowYeahYellowdog
验证码
评论列表 (暂无评论,1人围观)

还没有评论,来说两句吧...

目录[+]