PowerShell 技能连载 - SSH 远程管理

适用于 PowerShell 7.0 及以上版本

传统的 PowerShell Remoting 基于 WinRM(Windows Remote Management)协议,虽然功能强大,但存在明显的平台限制——它只能在 Windows 环境中工作。在企业混合环境中,运维人员往往需要同时管理 Windows 和 Linux 服务器,WinRM 的局限性就成了一个棘手的问题。此外,WinRM 在防火墙策略严格的网络中配置繁琐,端口和认证方式也不够灵活。

PowerShell 7 引入了基于 SSH 的远程会话支持,彻底改变了这一局面。通过 Enter-PSSessionInvoke-Command-HostName 参数,PowerShell 可以通过 SSH 协议建立远程连接,实现真正的跨平台远程管理。这意味着你可以从 Windows 管理 Linux 服务器、从 Linux 管理 Windows 服务器,甚至可以在云环境和容器中使用统一的远程管理体验。

SSH Remoting 不仅能与现有的 SSH 基础设施无缝集成,还支持密钥认证、跳板机(ProxyJump)、多主机并行执行等高级场景。本文将介绍如何配置和使用 PowerShell SSH Remoting,以及在混合环境中的实战技巧。

阅读更多

PowerShell 技能连载 - Azure Bastion 远程连接

适用于 PowerShell 5.1 及以上版本

Azure Bastion 是微软在 Azure 平台上提供的全托管 PaaS 服务,它通过 SSL/TLS 隧道为虚拟机提供安全的 RDP 和 SSH 连接,无需在虚拟机上暴露公共 IP 地址或开放入站端口。在企业混合云环境中,Bastion 充当了”跳板机”的安全替代方案,所有远程会话流量都经过加密且不经过公网,从根本上降低了暴力破解和端口扫描的风险。

传统的远程连接方式要求运维人员先通过 VPN 或跳板机接入内网,再使用 RDP/SSH 客户端连接目标虚拟机。这种方式不仅配置复杂,而且跳板机本身也面临安全威胁。Azure Bastion 将这一流程简化为浏览器直连或 CLI 命令行操作,同时与企业目录服务(Entra ID)深度集成,支持条件访问策略和多因素认证(MFA)。

本文将介绍如何通过 PowerShell 和 Azure CLI 管理 Azure Bastion 资源,包括部署 Bastion 主机、建立远程会话、查看连接会话日志以及批量审计 Bastion 配置。每个场景都提供可执行的代码示例和输出演示。

阅读更多

PowerShell 技能连载 - SSH 远程管理

适用于 PowerShell 7.0 及以上版本(跨平台)

在传统的 Windows 环境中,PowerShell 远程管理主要依赖 WinRM(Windows Remote Management)协议和 Enter-PSSessionInvoke-Command 等 cmdlet。然而,WinRM 是 Windows 专属协议,无法在 Linux 或 macOS 上运行,这给跨平台运维带来了不小的障碍。

从 PowerShell 7.0 开始,PowerShell 正式支持基于 SSH 的远程连接。通过 SSH 传输层,你可以使用熟悉的 Enter-PSSessionInvoke-Command 连接到任何安装了 SSH 服务的远程主机,无论对方运行的是 Windows、Linux 还是 macOS。这让 PowerShell 真正成为了一门跨平台的运维语言。

本文将介绍如何配置 SSH 远程管理环境,以及如何使用 PowerShell 通过 SSH 执行远程命令、管理多台服务器。

阅读更多

PowerShell 技能连载 - SSH 隧道与端口转发

适用于 PowerShell 5.1 及以上版本

在混合环境的运维工作中,并非所有服务都暴露在公网上。数据库、内部 API、管理后台通常隐藏在跳板机或防火墙后面,直接访问需要 VPN 或复杂的网络配置。SSH 隧道(SSH Tunneling)提供了一种轻量、安全的方案,通过加密通道将远程服务映射到本地端口,无需额外的网络基础设施。

Windows 自 OpenSSH 客户端内置以来(Windows 10 1809+、Windows Server 2019+),PowerShell 脚本可以直接调用 ssh 命令建立隧道。结合 PowerShell 的进程管理能力,可以动态创建、监控和清理 SSH 隧道,实现自动化的端口转发管理。

本文将讲解 PowerShell 中 SSH 隧道的创建、管理和自动化实践。

阅读更多

PowerShell 技能连载 - 远程管理进阶

适用于 PowerShell 5.1 及以上版本(Windows)

在前面的文章中,我们介绍了 SSH 远程管理的基础用法。本文将深入 PowerShell 远程管理的进阶技巧,包括 WinRM 配置优化、会话管理、 constrained endpoints(受限端点)、远程调试,以及大规模并行远程操作的策略。

阅读更多

PowerShell 技能连载 - SSH 远程管理

适用于 PowerShell 7.0 及以上版本(跨平台)

传统上,PowerShell 远程管理依赖 Windows 专属的 WinRM 协议和 Enter-PSSession 命令。但随着 PowerShell 7 的跨平台演进,以及混合云环境的普及,基于 SSH 的远程管理已成为官方推荐的新标准。SSH 不仅天然支持 Linux/macOS,还能在 Windows 上与 OpenSSH 无缝集成,实现真正的跨平台远程操作。

本文将从安装配置 OpenSSH 开始,逐步讲解如何通过 SSH 建立 PowerShell 远程会话、传输文件、执行远程命令,以及在生产环境中配置密钥认证和跳板机。

阅读更多

PowerShell 技能连载 - 远程管理

适用于 PowerShell 5.1 及以上版本

管理一台服务器时,远程桌面(RDP)可能就够了。但当你的环境有十几台甚至上百台服务器时,逐台登录操作就变得不可接受了。PowerShell Remoting 提供了一种高效、可扩展的远程管理方式,让你在一台机器上就能管理整个服务器群。

PowerShell Remoting 基于 WinRM(Windows Remote Management)协议,本质上是对 WS-Management 标准的实现。它不仅支持交互式会话,还支持一对多的批量命令执行,甚至可以跨越信任边界的双跳认证(CredSSP)。本文将从基础配置讲起,逐步深入到高级远程管理场景。

阅读更多

PowerShell远程调试核心技术

远程会话调试配置

1
2
3
4
5
6
7
8
9
10
$session = New-PSSession -ComputerName Server01
Enter-PSSession -Session $session

# 设置远程断点
$bpParams = @{
ScriptName = 'RemoteScript.ps1'
Line = 42
Action = { Write-Host "远程变量值: $using:localVar" }
}
Set-PSBreakpoint @bpParams

异常捕获增强

1
2
3
4
5
6
7
8
9
10
function Invoke-RemoteCommand {
param([scriptblock]$ScriptBlock)

try {
Invoke-Command -Session $session -ScriptBlock $ScriptBlock -ErrorAction Stop
}
catch [System.Management.Automation.RemoteException] {
Write-Warning "远程执行异常: $($_.Exception.SerializedRemoteException.Message)"
}
}

调试信息传输

1
2
3
4
5
6
7
8
9
10
# 创建调试信息通道
$debugStream = Register-ObjectEvent -InputObject $session -EventName DebugDataAdded -Action {
param($source, $eventArgs)
$debugRecord = $eventArgs.DebugRecord
[PSCustomObject]@{
时间戳 = Get-Date
调试级别 = $debugRecord.Level
详细信息 = $debugRecord.Message
}
}

典型应用场景

  1. 生产环境实时诊断
  2. 集群脚本批量调试
  3. 受限会话权限分析
  4. 跨域脚本问题追踪

安全注意事项

  • 使用受限端点配置
  • 加密调试信道通信
  • 清理临时调试会话
  • 审计调试日志留存
PowerShell 技术 QQ 群