最近,微软发布了一个适用于 Windows 的 OpenSSH 程序。您可以使用该软件包在 Windows 上设置 SFTP/SSH 服务器。
安装 SFTP/SSH 服务器
在 Windows 11 和 Windows 10 上
在 Windows 11 上:
- 转到应用程序 > 可选功能,然后单击查看功能。**
- 找到“OpenSSH 服务器”功能,选择它,单击*下一步*,然后单击安装*。
在 Windows 10(版本 1803 及更高版本)上:
- 转到应用程序 > 应用程序和功能 > 可选功能,然后单击添加功能。
- 找到“OpenSSH 服务器”功能,展开它,然后选择安装。
二进制文件安装在%WINDIR%\System32\OpenSSH
。配置文件 (sshd_config) 和主机密钥安装在%ProgramData%\ssh
(仅在服务器第一次启动后)。
如果您想安装比 Windows 内置版本更新的 OpenSSH 版本,您可能仍需要使用以下手动安装。
在早期版本的 Windows 上
- 下载最新的 OpenSSH for Windows 二进制文件(包
OpenSSH-Win64.zip
或OpenSSH-Win32.zip
) - 以管理员身份将包解压到
C:\Program Files\OpenSSH
- 以管理员身份安装 sshd 和 ssh-agent 服务:
powershell.exe -ExecutionPolicy Bypass -File install-sshd.ps1
配置 SSH 服务器
- 在 Windows 防火墙中允许到 SSH 服务器的传入连接:
- 当作为可选功能安装时,防火墙规则“OpenSSH SSH Server (sshd)”应该已经自动创建。如果没有,请继续创建并启用规则,如下所示。
- 以管理员身份运行以下 PowerShell 命令:
将New-NetFirewallRule -Name sshd -DisplayName 'OpenSSH SSH Server' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22 -Program "C:\Windows\System32\OpenSSH\sshd.exe"
C:\Windows\System32\OpenSSH\sshd.exe
替换为sshd.exe
的实际路径(C:\Program Files\OpenSSH\ssh.exe
,如果您按照上面的手动安装说明进行操作)。 - 或转到控制面板 > 系统和安全 > Windows Defender 防火墙1 > 高级设置 > 入站规则并为端口 22 添加新规则。
- 启动服务和/或配置自动启动:
- 转到控制面板 > 系统和安全 > 管理工具并打开服务。找到 OpenSSH SSH Server 服务。
- 如果您希望服务器在您的机器启动时自动启动:转至操作 > 属性。在“属性”对话框中,将“启动类型”更改为“自动”并确认。
- 通过单击启动服务启动 OpenSSH SSH Server 服务。
这些说明部分基于官方部署说明。
设置 SSH 公钥认证
遵循在 *nix OpenSSH 服务器中设置 SSH 公钥身份验证的通用指南,有以下区别:
- 在您的 Windows 帐户配置文件文件夹(通常在
C:\Users\username\.ssh
)中创建.ssh
文件夹(用于authorized_keys
文件)。 - 对于
.ssh
文件夹和authorized_keys
文件的权限,重要的是 Windows ACL 权限,而不是简单的 *nix 权限。设置 ACL,使相应的 Windows 帐户成为文件夹和文件的所有者,并且是对它们具有写入权限的唯一帐户。运行 OpenSSH SSH Server 服务的帐户(通常是SYSTEM
或sshd
)需要对该文件具有读取权限。 - 但是,对于默认的 Win32-OpenSSH 配置,在
sshd_config
中为管理员组中的帐户设置了一个例外。对于这些,服务器对授权密钥文件使用不同的位置:%ALLUSERSPROFILE%\ssh\administrators_authorized_keys
(即通常为C:\ProgramData\ssh\administrators_authorized_keys
)。
连接到服务器
查找主机密钥
在第一次连接之前,通过对每个文件使用 ssh-keygen.exe
找出服务器主机密钥的指纹。
在 Windows 命令提示符中,使用:
for %f in (%ProgramData%\ssh\ssh_host_*_key) do @%WINDIR%\System32\OpenSSH\ssh-keygen.exe -l -f "%f"
如果需要,将 %WINDIR%\System32
替换为 %ProgramFiles%
。
在 PowerShell 中,使用:
Get-ChildItem $env:ProgramData\ssh\ssh_host_*_key | ForEach-Object { . $env:WINDIR\System32\OpenSSH\ssh-keygen.exe -l -f $_ }
如果需要,将 $env:WINDIR\System32
替换为 $env:ProgramFiles
。
你会得到这样的输出:
C:\Windows\System32\OpenSSH>for %f in (%ProgramData%\ssh\ssh_host_*_key) do @%WINDIR%\System32\OpenSSH\ssh-keygen.exe -l -f "%f"
1024 SHA256:K1kYcE7GHAqHLNPBaGVLOYBQif04VLOQN9kDbiLW/eE martin@example (DSA)
256 SHA256:7pFXY/Ad3itb6+fLlNwU3zc6X6o/ZmV3/mfyRnE46xg martin@example (ECDSA)
256 SHA256:KFi18tCRGsQmxMPioKvg0flaFI9aI/ebXfIDIOgIVGU martin@example (ED25519)
2048 SHA256:z6YYzqGiAb1FN55jOf/f4fqR1IJvpXlKxaZXRtP2mX8 martin@example (RSA)
连接
启动 WinSCP。将出现登录对话框。在对话框中:
- 确保选择了新站点节点。
- 在新站点节点上,确保选择了 SFTP 协议。
- 在主机名框中输入您的机器/服务器 IP 地址(或主机名)。
- 在用户名框中输入您的 Windows 帐户名。如果在域上运行,它可能必须以 user@domain 格式输入。
- 对于公钥认证:
- 按高级按钮打开高级站点设置对话框并转到 SSH > 身份验证页面。
- 在私钥文件框中选择您的私钥文件。
- 使用确定按钮提交高级站点设置对话框。
- 对于密码验证:
- 在密码框中输入您的 Windows 帐户密码
- 如果您的 Windows 帐户没有密码,则无法使用密码验证(即使用空密码)进行验证,您需要使用公钥验证。
- 使用保存按钮保存您的站点设置。
- 使用登录按钮登录。
- 通过将指纹与上文收集的指纹进行比较来验证主机密钥。
如果您无法对服务器进行身份验证并使用 Windows 10 开发人员模式,请确保您的 OpenSSH 服务器与开发人员模式使用的内部 SSH 服务器不冲突。您可能需要关闭SSH Server Broker 和 SSH Server Proxy Windows 服务。或者在不同于 22 的端口上运行您的 OpenSSH 服务器。
原文链接:https://winscp.net/eng/docs/guide_windows_openssh_server#windows_older