powershell 可通过 ssh 远程管理 linux 主机,需 powershell 6+、两端安装 openssh、linux 配置 powershell 为 ssh 子系统,并使用 -hostname 等新参数建立会话。
powershell 可以通过 ssh 协议远程管理 linux 主机,但不是靠传统的 winrm(仅限 windows),而是依赖 openssh 服务和 powershell 6+ 的 ssh 远程会话支持。关键在于:linux 主机需运行 ssh 服务并配置为启动 powershell 子系统,windows 端需安装兼容版本的 powershell 并使用特定参数建立连接。
前提条件:两端环境必须就绪
确保以下全部满足,否则连接会失败:
- Windows 端安装 PowerShell 6 或更高版本(推荐 PowerShell 7.x);可通过
Get-Host | Select-Object Version验证 - Windows 上已安装 OpenSSH 客户端(
ssh.exe),Win10 1809+/Win Server 2019 默认自带,旧系统需手动安装 - Linux 主机已启用
sshd服务,且用户账户可正常 SSH 登录(如ssh user@192.168.1.100能连通) - Linux 主机上已安装 PowerShell(官方 .NET 版本),并配置为 SSH 子系统(见下文)
Linux 端:配置 PowerShell 作为 SSH 子系统
仅配置 SSH 登录还不够——必须让 SSH 服务在用户登录时自动启动 powershell 进程,而非默认 shell(如 bash)。操作步骤如下:
Linux系统管理专家,覆盖12大模块:用户权限、SSH、存储、网络、systemd、防火墙、日志监控、备份恢复、TLS证书、Ansible、容器、IaC。提供配置、验证、加固、监控、备份、自动化、故障排查、回滚闭环。关键词:useradd、sudo、sshd_config、chmod、SEL...
- 编辑
/etc/ssh/sshd_config,添加或取消注释这一行:Subsystem powershell /usr/bin/pwsh -sshs -NoLogo -NoProfile - 确认
pwsh命令路径正确(用which pwsh查看,常见为/usr/bin/pwsh或/opt/microsoft/powershell/7/pwsh) - 重启 SSH 服务:
sudo systemctl restart sshd - (可选)将用户默认 shell 改为
pwsh,避免每次连接后还需手动输入:chsh -s $(which pwsh)
Windows 端:用 PowerShell 命令建立 SSH 远程会话
不再使用 -ComputerName(那是 WinRM 模式),改用 -HostName 参数:
- 交互式进入远程会话:
Enter-PSSession -HostName 192.168.1.100 -UserName admin
执行后会提示输入密码;若已配密钥,加-KeyFilePath C:\keys\id_rsa - 非交互式执行单条命令:
Invoke-Command -HostName 192.168.1.100 -UserName admin -ScriptBlock { Get-Process | Select-Object -First 5 } - 创建持久会话供多次使用:
$s = New-PSSession -HostName 192.168.1.100 -UserName admin
后续可用Invoke-Command -Session $s -ScriptBlock { ... }
验证与排错要点
若连接失败,按顺序检查:
- 运行
(Get-Command New-PSSession).ParameterSets.Name,确认输出中含SSHHost—— 若无,说明 PowerShell 版本过低或未识别 SSH 支持 - 在 Windows 命令行直接运行
ssh admin@192.168.1.100,验证基础 SSH 连通性 - 登录 Linux 后手动执行
pwsh -sshs -NoLogo -NoProfile,确认该命令不报错且能进入 PowerShell 提示符 - 检查 Linux 的
/var/log/auth.log或journalctl -u ssh,看是否有子系统调用拒绝记录










