像管理 Linux 一样 SSH 到 Windows:OpenSSH Server 与 Git Bash 实战

在 Linux 运维中,ssh user@host 几乎是最自然的远程管理方式。登录之后,我们可以执行命令、查看日志、修改配置、拉取代码、运行脚本。问题是:如果目标主机是 Windows,能不能也像管理 Linux 一样,通过 SSH 进入一台 Windows 主机,并获得一个类似 Bash 的远程 Shell?

答案是:可以,但要分清"能用"和"适合怎么用"。

Windows 官方提供 OpenSSH Server,可以让 Windows 主机作为 SSH 服务端接收远程连接;同时,OpenSSH Server 还支持配置默认 Shell。也就是说,我们既可以让 SSH 登录后进入 PowerShell,也可以配置成进入 Git Bash。微软文档说明,Windows OpenSSH Server 可安装为系统组件,并通过 sshd 服务提供远程连接能力;其 Windows 专属配置也支持通过注册表配置默认 Shell。(Microsoft Learn)

不过,Git Bash 并不是完整 Linux 环境。Git for Windows 官方说明,它本质上是基于 MSYS2 的一个子集,提供 Git、Bash 以及部分 Unix 风格工具。(Git for Windows) 因此,Git Bash 更适合提供"类 Bash 的 Windows 远程操作体验",而不是把 Windows 变成一台 Linux。

一、Windows 上有哪些远程 Shell 方案

在 Windows 上,常见远程管理方式主要有三类。

第一类是 OpenSSH Server。这是最接近 Linux SSH 习惯的方案。客户端仍然使用:

bash 复制代码
ssh foo@windows-host

登录后进入 Windows 上配置的默认 Shell。这个 Shell 可以是 Windows PowerShell、PowerShell 7,也可以是 Git Bash。

第二类是 PowerShell Remoting 。这是 Windows 更传统的原生远程管理方案,基于 WS-Management。微软文档说明,Enable-PSRemoting 会配置计算机接收远程 PowerShell 命令。(Microsoft Learn) 在域环境、批量 Windows 运维、企业内网管理中,它依然很常见。

第三类是 RDP 远程桌面。它适合图形界面排障,但不是 Shell 方案,也不适合自动化脚本管理。

如果目标是"像 Linux 那样 ssh 进去执行命令",优先考虑 OpenSSH Server。

二、推荐架构:OpenSSH Server + PowerShell 或 Git Bash

一个典型结构如下:

text 复制代码
客户端 Linux/macOS/Windows
        |
        | ssh foo@windows-host
        v
Windows OpenSSH Server
        |
        v
默认 Shell:PowerShell / PowerShell 7 / Git Bash

其中,OpenSSH Server 负责认证、加密和会话管理;PowerShell 或 Git Bash 负责提供命令行交互环境。

如果你想要稳定、原生、适合生产的 Windows 管理体验,推荐默认 Shell 使用 PowerShell 7。

如果你想要更接近 Linux 的 Bash 操作习惯,可以把默认 Shell 配成 Git Bash,但要接受它的兼容性边界。

三、安装并启用 Windows OpenSSH Server

在目标 Windows 主机上,以管理员身份打开 PowerShell,安装 OpenSSH Server:

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

启动 sshd 服务并设置开机自启:

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

如果防火墙没有自动创建入站规则,可以手动放行 22 端口:

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

微软文档中的 OpenSSH Server 入门步骤也包含安装 Server 组件、启动服务和配置防火墙规则等内容。(Microsoft Learn)

然后在客户端测试连接:

bash 复制代码
ssh foo@windows-host

这里的 foo 是脱敏示例用户名,实际使用时替换为你的 Windows 本地账户或域账户。

四、默认进入 PowerShell:更适合生产运维

如果不额外修改默认 Shell,Windows OpenSSH 通常会进入 Windows 的默认命令环境。对于生产环境,我更推荐显式配置 PowerShell 7 作为默认 Shell。

示例:

powershell 复制代码
New-ItemProperty `
  -Path "HKLM:\SOFTWARE\OpenSSH" `
  -Name DefaultShell `
  -Value "C:\Program Files\PowerShell\7\pwsh.exe" `
  -PropertyType String `
  -Force

Restart-Service sshd

之后远程登录:

bash 复制代码
ssh foo@windows-host

登录后就是 PowerShell 7 环境。这样做的好处是,Windows 服务管理、注册表、事件日志、权限、网络配置等操作都更自然。

例如:

powershell 复制代码
Get-Service sshd
Get-EventLog -LogName System -Newest 20
Get-ChildItem C:\Users

如果你的目标是管理 Windows,而不是模拟 Linux,那么 PowerShell 是更稳妥的选择。

五、默认进入 Git Bash:获得类 Linux 体验

如果你已经安装 Git for Windows,就可以使用 Git Bash 作为 OpenSSH 登录后的默认 Shell。

常见的 Bash 路径是:

text 复制代码
C:\Program Files\Git\bin\bash.exe

以管理员身份执行:

powershell 复制代码
New-ItemProperty `
  -Path "HKLM:\SOFTWARE\OpenSSH" `
  -Name DefaultShell `
  -Value "C:\Program Files\Git\bin\bash.exe" `
  -PropertyType String `
  -Force

New-ItemProperty `
  -Path "HKLM:\SOFTWARE\OpenSSH" `
  -Name DefaultShellCommandOption `
  -Value "-lc" `
  -PropertyType String `
  -Force

Restart-Service sshd

微软文档说明,Windows OpenSSH Server 的默认 Shell 可以通过 HKLM:\SOFTWARE\OpenSSH\DefaultShell 配置;DefaultShellCommandOption 可用于控制远程命令传递给 Shell 时使用的命令参数。(Microsoft Learn)

配置完成后,从客户端登录:

bash 复制代码
ssh foo@windows-host

进入后可以测试:

bash 复制代码
pwd
whoami
git --version
ls

你可能会看到类似路径:

bash 复制代码
/c/Users/foo

这就是 Git Bash 对 Windows 路径的 Unix 风格映射。

六、Git Bash 远程 Shell 能做什么

Git Bash 作为 Windows SSH Shell,适合这些场景:

text 复制代码
Git 仓库操作
轻量文件管理
执行 Bash 风格脚本
调用 Windows 可执行文件
在 Linux/macOS 客户端上统一使用 ssh 入口

例如:

bash 复制代码
cd /c/Users/foo/project
git pull
./build.sh

也可以从 Git Bash 调用 Windows 命令:

bash 复制代码
ipconfig.exe
powershell.exe -NoProfile -Command "Get-Service sshd"
cmd.exe /c ver

这类混合操作很实用:外层是 Bash 风格,底层仍然可以调用 Windows 能力。

七、Git Bash 不是 Linux:必须理解边界

Git Bash 最大的误区,是把它当成完整 Linux。

它不是。它没有 Linux 内核语义,没有 systemd,没有 apt/yum/dnf,也不具备完整 Linux 文件权限模型。Git for Windows 官方也明确说明,它是 MSYS2 的一个子集,而不是完整 Linux 发行版。(Git for Windows)

因此,下面这些脚本很可能不能直接工作:

bash 复制代码
systemctl restart nginx
apt install foo
journalctl -u sshd
chmod +x some-service && systemctl enable some-service

路径也需要注意。Git Bash 中的:

bash 复制代码
/c/Users/foo/project

对应 Windows 中的:

text 复制代码
C:\Users\foo\project

这种路径转换对日常使用很方便,但在 Docker、rsync、复杂脚本参数、Windows 原生命令参数中,可能产生兼容性问题。

八、不要把 Git Bash 入口配置得太"花"

很多人会在 .bashrc.bash_profile 中加入欢迎语、彩色输出、自动检查更新、复杂 prompt。这在本地终端没问题,但在 SSH 场景中可能影响自动化工具。

尤其是 scpsftp、VS Code Remote-SSH、CI/CD 探测命令等,往往要求远程 Shell 在非交互模式下保持安静。建议在 .bashrc 顶部增加判断:

bash 复制代码
case $- in
  *i*) ;;
  *) return ;;
esac

然后把 alias、prompt、欢迎信息等只放在交互式 Shell 中:

bash 复制代码
alias ll='ls -alF'
alias gs='git status'

九、密钥认证与安全建议

SSH 暴露的是远程控制入口,不应该随意开放。

建议至少做到:

text 复制代码
优先使用 SSH 密钥认证
限制允许登录的用户或用户组
禁止弱密码
仅在可信内网或 VPN 后暴露 22 端口
按需关闭密码登录

可以在 C:\ProgramData\ssh\sshd_config 中配置:

text 复制代码
PubkeyAuthentication yes
PasswordAuthentication no
AllowUsers foo

修改后重启服务:

powershell 复制代码
Restart-Service sshd

微软文档说明,Windows OpenSSH Server 的配置文件通常位于 C:\ProgramData\ssh\sshd_config,配置变更后需要重启 sshd 服务才能生效。(Microsoft Learn)

十、PowerShell、Git Bash、WSL 怎么选

可以按目标选择:

目标 推荐方案
管理 Windows 服务、权限、事件日志、注册表 OpenSSH + PowerShell 7
像 Linux 一样用 ssh 登录并执行简单 Bash 命令 OpenSSH + Git Bash
运行真实 Linux 工具链 WSL、Linux VM 或真实 Linux 主机
企业域环境批量管理 Windows PowerShell Remoting
图形界面排障 RDP

我的建议是:

text 复制代码
生产 Windows 服务器:
    默认 Shell 使用 PowerShell 7。

开发机或内网工具机:
    可以尝试默认 Shell 使用 Git Bash。

需要真实 Linux 环境:
    不要用 Git Bash 硬模拟,直接使用 WSL、虚拟机或 Linux 主机。

十一、一个更稳妥的折中方案

如果你既想保留稳定的 Windows 运维能力,又想偶尔使用 Bash,可以把默认 Shell 保持为 PowerShell,然后在需要时手动启动 Git Bash。

默认 Shell 配成 PowerShell 7:

powershell 复制代码
New-ItemProperty `
  -Path "HKLM:\SOFTWARE\OpenSSH" `
  -Name DefaultShell `
  -Value "C:\Program Files\PowerShell\7\pwsh.exe" `
  -PropertyType String `
  -Force

Restart-Service sshd

登录后手动进入 Git Bash:

powershell 复制代码
& "C:\Program Files\Git\bin\bash.exe" -l

也可以远程执行一次性 Bash 命令:

bash 复制代码
ssh foo@windows-host '"C:\Program Files\Git\bin\bash.exe" -lc "pwd && git status"'

这种方式的好处是:默认入口稳定,Git Bash 作为辅助工具存在,不会影响所有 SSH 会话。

十二、结论

Windows 可以像 Linux 一样通过 SSH 远程登录和管理。实现方式是安装并启用 Windows OpenSSH Server,然后选择合适的默认 Shell。

如果目标是标准 Windows 运维,推荐使用 PowerShell 7。 如果目标是获得类 Linux 的 Bash 操作体验,可以结合 Git Bash。 但 Git Bash 不是完整 Linux,只适合轻量 Bash 风格操作、Git 工作流和简单自动化,不建议承担生产级 Linux 兼容环境的角色。

一句话总结:

text 复制代码
OpenSSH Server 让 Windows 可以被 ssh 进去;
PowerShell 适合真正管理 Windows;
Git Bash 适合提供类 Linux 的操作手感;
需要真实 Linux 时,应使用 WSL、虚拟机或 Linux 主机。
相关推荐
大树882 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠2 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质2 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
开发者联盟league2 天前
安装pnpm
ssh
qq_369224332 天前
Windows全系通用!ntdll.dll文件丢失、报错、闪退问题的完整排查与修复教程
windows·dll·dll修复·dll丢失·dll错误
Inhand陈工2 天前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信
酣大智2 天前
ARP代理--工作原理
运维·网络·arp·arp代理
shushangyun_2 天前
2026年快消品B2B系统推荐:支持终端门店订货、促销政策自动化的工具?
java·运维·网络·数据库·人工智能·spring·自动化
施努卡机器视觉2 天前
SNK施努卡侧滑门锁上滑轮总成自动化装配线,从零件到组件,全流程精密制造方案
运维·自动化·制造
AC赳赳老秦2 天前
用 OpenClaw 搭建服务器故障应急响应系统,自动处理 80% 常见运维故障
android·运维·服务器·python·rxjava·deepseek·openclaw