Loading [MathJax]/extensions/Safe.js

#737 在 Windows 上使用 OpenSSH安装 SFTP/SSH 服务器

 知识库默认  [公开]
icon张宏邦在 2022-5-25 下午2:01 编写 ( icon张宏邦在 2022-5-25 下午2:57 更新 <历史> )
  编辑(登录)
  收藏
  响应调查   响应调查

  主题

最近,微软发布了一个适用于 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.zipOpenSSH-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 服务的帐户(通常是 SYSTEMsshd)需要对该文件具有读取权限。
  • 但是,对于默认的 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 BrokerSSH Server Proxy Windows 服务。或者在不同于 22 的端口上运行您的 OpenSSH 服务器。


原文链接:https://winscp.net/eng/docs/guide_windows_openssh_server#windows_older

 附加文件     - [0]


 添加评论