当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] 立即利用 SSH 和 PowerShell 安全传输文件

作者:精品下载站 日期:2024-12-14 13:00:41 浏览:13 分类:玩电脑

立即利用 SSH 和 PowerShell 安全传输文件


曾几何时,您可以使用 PowerShell 远程处理通过 Windows PowerShell 连接到的计算机类型受到限制。由于 PowerShell Remoting 仅支持 WsMan 提供程序,因此您连接到运行 Linux 的计算机的机会为零。不过,早在 2015 年,微软就在 Windows 中引入了对 SSH 的支持,带来了巨大的潜力,并最终允许您同时使用 SSH 和 PowerShell。

在本文中,我们将深入了解如何设置 Windows 的 SSH 客户端以及如何利用 SSH 和 PowerShell 远程处理。

这篇 SSH 和 PowerShell 帖子是 #PS7Now 博客系列的一部分。请务必在本文底部查看本系列中的所有其他贡献者。

在你开始之前

本文将是一个演练教程。如果您打算继续操作,请确保满足以下先决条件:

  • Windows 10 - 所有示例都将使用 Windows 10 Build 1903。该示例将与远程 Windows Server 位于同一域中。
  • Windows 10 上安装的 PowerShell v6+ - 所有示例都将使用 PowerShell 7 RC2。
  • 远程 SSH 服务器 - 所有示例都将使用 Windows Server SSH 计算机。如果您要连接到 Linux 计算机,则可以跳过服务器设置步骤。
  • TCP 端口 22 在远程服务器上可用

SSH 客户端 (Windows 10) 设置

在打开 PowerShell 控制台之前,您首先需要执行一些一次性任务,以使 SSH 和 PowerShell 协同工作,以确保 Windows 10 可以连接到远程 SSH 服务器。

将 OpenSSH 文件夹添加到 PATH 环境变量

OpenSSH 预装在 Windows 10 上,但有时需要一些帮助才能使用 PowerShell 远程处理。例如,如果您已尝试使用 Enter-PSSession 连接到远程 SSH 系统并遇到以下错误,则需要确保 OpenSSH 可执行文件的路径( ssh.exe)位于 PATH 环境变量中。

Enter-PSSession : An error has occurred which PowerShell cannot handle. A remote session might have ended.

要将 OpenSSH 文件夹路径添加到 PATH 环境变量,请单击开始按钮并搜索高级系统设置,然后单击查看高级系统设置 > 如下图。

[玩转系统] 立即利用 SSH 和 PowerShell 安全传输文件

系统属性窗口出现时,单击环境变量按钮。

[玩转系统] 立即利用 SSH 和 PowerShell 安全传输文件

环境变量窗口中的系统变量下,选择路径,然后单击编辑

[玩转系统] 立即利用 SSH 和 PowerShell 安全传输文件

编辑环境变量窗口中,单击新建,然后输入ssh.exe可执行文件所在的路径。对于本教程,路径为C:\Program Files\OpenSSH,如下所示。输入后,单击确定两次以保存新值。

[玩转系统] 立即利用 SSH 和 PowerShell 安全传输文件

指定 SSH 子系统

现在,您需要指定在远程 Windows Server 上通过 SSH 连接时要调用的 PowerShell 的 SSH 子系统。如果您不告诉 PowerShell 使用哪个子系统,您将不可避免地收到以下错误:

Enter-PSSession:后台进程报告错误,并显示以下消息:SSH 客户端会话已结束,并显示错误消息:子系统请求在通道 0 上失败。

请注意,如果您没有连接到 Windows Server 计算机,则无需执行这些步骤。

在远程 Windows Server 上,打开 C:\ProgramData\ssh\ssh_config 文件。向下滚动到 ssh_config 文件的覆盖无子系统的默认值部分。该部分将类似于下面的屏幕截图。

[玩转系统] 立即利用 SSH 和 PowerShell 安全传输文件

在现有 Subsystem 行下方,使用以下行添加 PowerShell 子系统:

Subsystem	powershell pwsh.exe -sshs -NoLogo -NoProfile

现在保存 ssh_config 文件并重新启动远程 Windows 服务器上的 sshd Windows 服务,如下所示。

Get-Service -Name sshd | Restart-Service

服务重新启动后,您现在应该能够通过 SSH 和 PowerShell 进行连接。

通过 PowerShell 和 SSH 连接

现在配置已完成,是时候测试 PowerShell Remoting 了。

首先,尝试使用 Enter-PSSession cmdlet 进入交互式会话。与您可能习惯的不同,您将不会使用ComputerName参数。相反,您将使用 HostName 参数来指定远程计算机。

默认情况下,PowerShell Remoting 仍使用 WsMan。要覆盖默认设置,请使用 SSHTransport 参数来指示您希望通过 SSH 和 PowerShell 进行连接。

当您首次尝试使用用户名和密码进行连接时,您需要创建 SSH 私钥。为此,系统会提示您,如下所示。当出现提示时,输入“y”接受。

[玩转系统] 立即利用 SSH 和 PowerShell 安全传输文件

然后系统会提示您输入当前登录用户的密码。

请注意,在此示例中,Windows 10 客户端和 Windows Server SSH 服务器位于同一 Active Directory 域中。默认情况下,PowerShell Remoting 将尝试对登录用户进行身份验证。您还可以使用Credential参数指定不同的用户名和密码。

提供密码后,您应该会看到熟悉的 PowerShell Remoting 提示符。

[玩转系统] 立即利用 SSH 和 PowerShell 安全传输文件

现在使用 exit 退出会话,然后尝试 New-PSSession。请注意,下面使用与之前相同的 HostNameSSHTransport 参数,Transport 现在显示为 SSH

您仍然可以使用 ComputerName 参数将 WsMan 用作传输协议,而不使用 SSHTransport 参数。

您不需要使用 SSH 用户名和密码。您可以改为使用私钥文件并使用 KeyFilePath 参数来提供位置。

[玩转系统] 立即利用 SSH 和 PowerShell 安全传输文件

不要忘记使用 Get-PSSession | 清理打开的会话。删除-PSSession!

概括

您现在应该知道如何将 Windows 10 和 Windows Server 设置为将 SSH 与 PowerShell 远程处理结合使用。配置完成后,使用 WsMan 作为传输协议和 SSH 之间的唯一区别是几个参数!

如果您想了解有关 PowerShell 和 SSH 的更多信息,请务必查看 Microsoft 文档文章《PowerShell Remoting over SSH》。

#PS7Now 贡献者

这篇文章是由优秀贡献者撰写的 PowerShell 7 系列文章的一部分,如下所示。请务必查看他们的帖子并了解他们在博客上的动态!

AuthorTwitterBlogJosh King@WindosNZhttps://toastit.dev/Adam Bertram@adbertramhttps://adamtheautomator.com/Jonathan Medd@jonathanmeddThomas Lee@doctordnshttps://tfl09.blogspot.com/Prateek Singh@singhprateikhttps://ridicurious.comDave Carroll@thedavecarrollhttps://powershell.anovelidea.org/Dan Franciscus@dan_franciscushttps://winsysblog.com/Jeff Hicks@jeffhickshttps://jdhitsolutions.comJosh Duffney@joshduffneyhttp://duffney.io/Mike Kanakos@MikeKanakoshttps://www.networkadm.in/Tommy Maynard@thetommymaynardhttps://tommymaynard.com//

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯