从 PowerShell 使用 SSH 的完整指南:配置和实际示例

最后更新: 07/05/2025
作者: 艾萨克
  • PowerShell的 允许您使用以下方式连接和管理远程系统 SSH的 原生于 Windows 10/11 及最新版本。
  • 安装和配置 OpenSSH 作为客户端和服务器很简单,允许根据安全需求进行密码或公钥认证。
  • PowerShell SSH 的高级功能包括自动化、会话管理和自定义,使得混合环境中的远程管理变得简单。

通过 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 的先决条件

SSH PowerShell 要求

在开始从 PowerShell 管理远程系统之前,您需要检查您的计算机和目标计算机上的一些基本要求:

  • PowerShell 更新: 建议使用 PowerShell 6 或更高版本来充分利用所有功能。在 Windows 10 和 11 中它是预安装的,但最好使用以下命令检查版本 $PSVersionTable.PSVersion.
  • OpenSSH 客户端: 您需要安装 OpenSSH 客户端。从 Windows 10(版本 1809)和 Windows Server 2019 开始,它作为一项可选功能包含在内,但您可以根据需要手动安装它。
  • 远程计算机上启用的 SSH 服务器: 您将要连接的系统必须启用 SSH(可以是 Linux 机器、Windows 机器、网络设备等)。
  • 网络访问: 您所连接的计算机必须能够访问 SSH 服务器的 IP 或域,并且防火墙上的端口 22 必须打开。
  • 用户许可: 虽然成为管理员并不总是必要的,但在许多情况下,您需要提升权限才能安装功能或访问远程系统。
  如何从 Android 手机的设置菜单中删除开发者选项

检查 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 用于详细模式,对调试有用。
  了解如何再次解决 iPhone 键盘上缺少表情符号键的问题

在 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的:添加用户
  如何在VLC媒体播放器中有效同步字幕

这些命令支持对重复性任务或复杂基础设施进行完整的管理、自动化和脚本编写。

PowerShell 中 SSH 会话的高级配置和自定义

PowerShell SSH 提供了许多高级选项来定制体验以满足您的需求:

  • 编辑配置文件 在 $env:ProgramData\ssh\sshd_config 中微调身份验证、算法、规则等。
  • 通过密码或公钥允许或阻止访问 根据安全需要。
  • 添加 PowerShell 等子系统 使用“Subsystem powershell c:/progra~1/powershell/7/pwsh.exe -sshs -nologo”直接在 PowerShell 中启动远程会话。
  • 重启服务并调整环境变量 以便一切正常。