在 Windows 上安装和配置 OpenSSH 服务器
从 Windows Server 2019 和 Windows 10 (1809) 开始,微软官方已经将 OpenSSH 作为一项可选功能内置到了系统中,这使得我们可以非常方便地在 Windows 上搭建一个标准的 SSH 服务器,用于远程管理或文件传输。
本教程将详细介绍如何在 Windows Server 或 Windows 10/11 上安装和配置 OpenSSH Server。
1. 通过图形化界面安装 (Windows 设置)
这是最简单直观的方法,适用于带有桌面体验的 Windows 版本。
打开 "设置":
- 点击 "开始" 菜单,选择 "设置" (齿轮图标)。
- 进入 "应用" -> "可选功能"。
添加功能:
- 在 "可选功能" 页面,点击 "+ 添加功能"。
- 在弹出的列表中,找到并勾选 "OpenSSH 服务器"。
- 点击 "安装"。
等待安装完成:
- 系统会自动下载并安装 OpenSSH 服务器组件。安装完成后,你可以在 "已安装功能" 列表中看到它。
2. 通过 PowerShell 安装 (推荐,适用于 Server Core)
对于 Windows Server Core 或希望通过脚本自动化部署的场景,使用 PowerShell 是最高效的方式。
以管理员身份打开 PowerShell:
- 右键点击 "开始" 菜单,选择 "Windows PowerShell (管理员)"。
检查 OpenSSH 服务器是否可用:
powershellGet-WindowsCapability -Online | Where-Object Name -like 'OpenSSH.Server*'如果
State显示为NotPresent,则表示可以安装。安装 OpenSSH 服务器:
powershellAdd-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0注意:
OpenSSH.Server~~~~0.0.1.0是功能的确切名称,请以上一步命令查询到的为准。启动并设置服务为自动启动:
powershell# 启动服务 Start-Service sshd # (可选) 设置服务为开机自启动 Set-Service -Name sshd -StartupType 'Automatic'
3. 配置防火墙
安装并启动服务后,默认的 SSH 端口(TCP 22)可能被 Windows Defender 防火墙阻止。你需要创建一个入站规则来允许外部连接。
通过 PowerShell 配置防火墙
执行以下命令来创建一个允许 TCP 22 端口访问的防火墙规则:
New-NetFirewallRule -Name sshd -DisplayName 'OpenSSH Server (sshd)' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 224. 验证连接
现在,你可以从任何 SSH 客户端(如 PuTTY、Xshell、或者另一台 Linux/macOS 的终端)尝试连接你的 Windows 服务器了。
ssh your_windows_username@your_server_ip首次连接时,系统会提示你输入 Windows 账户的密码。
至此,你的 Windows OpenSSH 服务器已经成功搭建并运行起来了。为了提高安全性,强烈建议后续配置基于密钥的免密登录,并禁用密码登录。
5. 配置 sshd_config 文件
OpenSSH 服务器的主要配置文件是 sshd_config,它通常位于 %ProgramData%\ssh\ 目录下。你需要以管理员权限编辑此文件来修改服务器的行为。
找到
sshd_config文件:powershell# 通常路径为 C:\ProgramData\ssh\sshd_config notepad "$env:ProgramData\ssh\sshd_config"或使用其他你喜欢的编辑器(如 VSCode)。
常用配置项解释:
配置项 默认值/示例 解释 Port22SSH 服务器监听的端口。为了安全,建议修改为非标准端口(如 2222),修改后请确保防火墙规则也随之更新。HostKey%ProgramData%\ssh\ssh_host_rsa_key等服务器的主机密钥文件路径。通常不需要修改,系统会自动生成。 AuthorizedKeysFile.ssh/authorized_keys用户公钥文件的相对路径。此路径是相对于用户主目录而言的。例如, C:\Users\用户名\.ssh\authorized_keys。PasswordAuthenticationyes是否允许通过密码进行身份验证。强烈建议在配置好密钥登录后将其设置为 no,以提高安全性。PubkeyAuthenticationyes是否允许通过公钥进行身份验证。设置为 yes以启用密钥登录。PermitEmptyPasswordsno是否允许空密码用户登录。出于安全考虑,应始终保持 no。AllowUsers(无) 允许哪些用户登录。可以指定多个用户,用空格分隔。 AllowUsers user1 user2。DenyUsers(无) 拒绝哪些用户登录。优先级高于 AllowUsers。AllowGroups(无) 允许哪些组的用户登录。 DenyGroups(无) 拒绝哪些组的用户登录。 PermitRootLoginprohibit-password(或no)是否允许 root(管理员) 用户直接登录。prohibit-password表示只允许密钥登录,不允许密码登录。no表示完全禁止。Subsystem sftpsftp internal-sftp配置 SFTP 服务。 internal-sftp表示使用 OpenSSH 内置的 SFTP 服务器。ClientAliveInterval0(或0)服务器每隔多少秒发送一个空包给客户端,用于保持连接。如果为 0则不发送。ClientAliveCountMax3服务器在没有收到客户端响应的情况下,在断开连接前会发送多少次 ClientAliveInterval消息。
示例 sshd_config (推荐安全配置)
以下是一个更安全的 sshd_config 示例,推荐在生产环境中使用:
# ----------------------------------------------------------------------------
# 这是 sshd_config 文件的示例配置
# 请根据您的实际需求进行修改
# ----------------------------------------------------------------------------
# 监听端口,建议修改为非默认端口
Port 2222
# HostKey 是服务器的身份标识,通常由安装程序自动生成
# HostKey %ProgramData%\ssh\ssh_host_rsa_key
# HostKey %ProgramData%\ssh\ssh_host_dsa_key
# HostKey %ProgramData%\ssh\ssh_host_ecdsa_key
# HostKey %ProgramData%\ssh\ssh_host_ed25519_key
# ------------------------- 身份验证 ---------------------------
# 允许公钥认证
PubkeyAuthentication yes
# 指定用户公钥文件,相对于用户主目录
AuthorizedKeysFile .ssh/authorized_keys
# 禁用密码认证 (强烈推荐在配置好密钥登录后设置)
PasswordAuthentication no
# 禁止空密码登录
PermitEmptyPasswords no
# 禁止管理员账户直接登录 (如果需要,可以通过跳板机或普通用户切换)
PermitRootLogin no
# ------------------------- SFTP 子系统 --------------------------
# 启用 SFTP 支持
Subsystem sftp sftp-server.exe
# ------------------------- Keep Alive ---------------------------
# 每 60 秒发送一次心跳包
ClientAliveInterval 60
# 如果 3 次无响应,则断开连接
ClientAliveCountMax 3修改 sshd_config 文件后,请务必重启 sshd 服务以使更改生效:
Restart-Service sshd