- PowerShell的 允许您使用以下方式连接和管理远程系统 SSH的 原生于 Windows 10/11 及最新版本。
- 安装和配置 OpenSSH 作为客户端和服务器很简单,允许根据安全需求进行密码或公钥认证。
- PowerShell SSH 的高级功能包括自动化、会话管理和自定义,使得混合环境中的远程管理变得简单。
通过 PowerShell 直接使用 SSH连接服务器已不再是管理员的专属领域。如今,借助 Windows 10 及更高版本中的原生集成,任何 Windows 用户都可以通过SSH终端访问和管理服务器,甚至实现任务自动化。这一过程不仅比以往任何时候都更加便捷,而且在稳定性和安全性方面也得到了显著提升,使其成为传统外部客户端的可靠替代方案。
如果您曾经需要在不离开办公桌的情况下管理远程系统、复制文件、查看日志或在Linux或 Windows 服务器上运行命令,那么这本详尽的指南将对您大有裨益。您将学习到从 OpenSSH 的要求、安装和在不同平台上的配置,到使用基本命令和高级 PowerShell SSH 功能的实际示例,从而最大限度地发挥远程管理的效用。
什么是 SSH 以及为什么在 PowerShell 中使用它?
SSH(安全外壳协议)是一种安全通信协议,允许通过终端访问和管理远程系统。它相对于其他协议(例如 Telnet)的主要优势在于端到端加密,这确保了所有信息(包括用户名和密码)在传输过程中都受到全面保护。
PowerShell 是 Windows 的高级命令行界面,用于执行用户和管理任务。多年来,Windows 一直集成着原生 SSH 客户端,使用户能够直接从 PowerShell 充分利用 SSH 的强大功能,从而轻松安全地管理 Linux、Windows 和其他远程设备。
从 PowerShell 使用 SSH 的先决条件

在开始从 PowerShell 管理远程系统之前,您需要检查您的计算机和目标计算机上的一些基本要求:
- PowerShell 更新: 建议使用 PowerShell 6 或更高版本来充分利用所有功能。在 Windows 10 和 11 中它是预安装的,但最好使用以下命令检查版本 $PSVersionTable.PSVersion.
- OpenSSH 客户端: 您需要安装 OpenSSH 客户端。从 Windows 10(版本 1809)和 Windows Server 2019 开始,它作为一项可选功能包含在内,但您可以根据需要手动安装它。
- 远程计算机上启用的 SSH 服务器: 您将要连接的系统必须启用 SSH(可以是 Linux 机器、Windows 机器、网络设备等)。
- 网络访问: 您所连接的计算机必须能够访问 SSH 服务器的 IP 或域,并且防火墙上的端口 22 必须打开。
- 用户许可: 虽然成为管理员并不总是必要的,但在许多情况下,您需要提升权限才能安装功能或访问远程系统。
检查 Windows 上的 OpenSSH 安装和版本
要检查您的系统上是否有可用的 OpenSSH 客户端,请打开 PowerShell 并运行:
Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH*'
客户端和服务器端的状态都会显示为已安装或未安装。如果未安装,您可以使用以下命令添加:
Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0
对于服务器,如果您想在自己的计算机上启用接收 SSH 连接:
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
安装后,您将能够直接在 PowerShell 或命令提示符中使用“ssh”命令。
在 Windows 上配置并启动 SSH 服务
如果您要在 Windows 上接受 SSH 连接,则需要确保服务已启动。要启动它并将其配置为每次启动系统时自动启动,请运行:
Start-Service sshd
Set-Service -Name sshd -StartupType 'Automatic'
建议确认防火墙规则中是否已存在允许通过端口 22 (SSH) 的入站流量的规则:
if (!(Get-NetFirewallRule -Name "OpenSSH-Server-In-TCP" -ErrorAction SilentlyContinue | Select-Object Name, Enabled)) {
Write-Output "Firewall Rule 'OpenSSH-Server-In-TCP' does not exist, creating it..."
New-NetFirewallRule -Name 'OpenSSH-Server-In-TCP' -DisplayName 'OpenSSH Server (sshd)' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22
} else {
Write-Output "Firewall rule 'OpenSSH-Server-In-TCP' has been created and exists."
}
入门:通过 PowerShell 通过 SSH 连接
完成所有设置后,您可以使用简单的 PowerShell 命令启动 SSH 会话:
ssh usuario@servidor
请记住将“username”替换为远程计算机上的用户名,将“server”替换为 IP 地址或 DNS 名称。运行程序时,它会要求您接受主机密钥(首次运行)和密码。
连接Linux服务器的真实示例:
ssh [email protected]
您还可以使用活动的 SSH 服务器连接到其他 Windows 系统,或连接到兼容的网络设备。
高级参数和密钥认证
SSH 在身份验证和建立连接方面提供了极大的灵活性。最常用的参数包括:
- -i 要指定无密码身份验证的私钥:
ssh -i ruta/claves/id_rsa usuario@servidor - -p 要指定 22 以外的端口:
ssh -p 2222 usuario@servidor - -v 用于详细模式,对调试有用。
在 PowerShell 中,您可以使用 ssh-keygen 生成的密钥并将其复制到远程服务器,以增加安全性和便利性,避免使用密码。
使用 PowerShell 管理和自动化高级 SSH 会话
除了基本命令外,PowerShell 还包含用于处理 SSH 会话的高级 cmdlet,例如New-PSSession、Enter-PSSession 和 Invoke-Command。这增强了远程管理功能,使您能够自动执行脚本和维护任务,而无需每次都手动登录。
- 新 PS 会话 允许您通过指定主机、用户和密码或公钥来创建新的远程会话。
- 进入-的PSSession 允许您以交互方式进入远程会话,执行命令,就像您实际在另一台计算机上一样。
- 调用命令 远程执行命令或脚本块,非常适合大规模管理或自动化任务。
启动会话的示例:
New-PSSession -HostName 192.168.1.100 -UserName admin
进入创建的会话:
Enter-PSSession -Session $session
您可以通过 PowerShell 轻松传输文件、监控进程、自动执行任务等。
在 Linux 和 macOS 上配置 SSH 服务器以进行 PowerShell 连接
您不仅可以从 PowerShell 管理 Windows 计算机,还可以访问 Linux 和 macOS 服务器。在这些计算机上,您需要确保 OpenSSH 服务已安装并正在运行。在 Linux(例如 Ubuntu)中操作如下:
sudo apt install openssh-client
sudo apt install openssh-server
要检查它是否处于活动状态:
sudo systemctl status sshd
在 macOS 上,只需在系统设置中从“共享”-“远程登录”启用远程访问。
在这两种情况下,您都可以编辑 sshd_config 文件以允许密码或公钥验证,甚至将 PowerShell 设置为默认 shell。
PowerShell 中的实用 SSH 命令
一旦连接,就可以执行各种远程系统命令。一些日常管理有用的例子:
- ls / 目录:列出目录的内容
- cd: 改变目录
- 触摸/新项目:创建新文件
- rm / 删除项目:删除文件或文件夹
- mv / 移动项目:移动或重命名文件
- SCP:在客户端和服务器之间传输文件
- useradd的:添加用户
这些命令支持对重复性任务或复杂基础设施进行完整的管理、自动化和脚本编写。
PowerShell 中 SSH 会话的高级配置和自定义
PowerShell SSH 提供了许多高级选项来定制体验以满足您的需求:
- 编辑配置文件 在 $env:ProgramData\ssh\sshd_config 中微调身份验证、算法、规则等。
- 通过密码或公钥允许或阻止访问 根据安全需要。
- 添加 PowerShell 等子系统 使用“Subsystem powershell c:/progra~1/powershell/7/pwsh.exe -sshs -nologo”直接在 PowerShell 中启动远程会话。
- 重启服务并调整环境变量 以便一切正常。
对字节世界和一般技术充满热情的作家。我喜欢通过写作分享我的知识,这就是我在这个博客中要做的,向您展示有关小工具、软件、硬件、技术趋势等的所有最有趣的事情。我的目标是帮助您以简单而有趣的方式畅游数字世界。