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

[玩转系统] PSRemoting Linux 和 Windows 简介:如何指导

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

PSRemoting Linux 和 Windows 简介:如何指导


PowerShell 在过去几年中发生的重大变化之一是它采用了多种方式与非 Windows 计算机进行交互。其中一项更改是通过 SSH 支持 PSRemoting。通过 SSH 的 PSRemoting 也意味着拥有 PSRemoting Linux!

虽然设置 PSRemoting 以与 SSH 和 Linux 配合使用确实需要一些设置才能工作,但这允许您使用 PowerShell 与 Linux 机器本机交互。

在本教程中,您将学习如何设置 Windows 客户端以使用 PSRemoting 通过 SSH 连接到 Linux 计算机 (CentOS),反之亦然。您将了解如何使用密码使用证书进行身份验证。

相关:PowerShell 远程处理:终极指南

先决条件

本教程将进行演练。如果您想跟随,请确保您提前准备好以下内容:

  • Windows 10 build 1809 或更高版本的计算机。本教程将使用 Windows Server 2019 Standard 作为远程服务器。
  • 支持 PowerShell 7 的 Linux 计算机。本教程将使用 CentOS 8。
  • Linux 计算机上的 Sudo 权限和 Windows 计算机上的本地管理员权限。初始设置后,可以撤销某些权利。

为通过 SSH 的 PSRemoting 设置 Windows(客户端)

首先,您需要在 Windows 客户端上配置 PSRemoting 客户端 (PowerShell)。为此,您需要设置和配置 PowerShell 7+ 和 OpenSSH。

安装 PowerShell 7+

首先,安装 PowerShell 7+。本教程不会介绍如何执行此操作。要了解如何操作,请查看下面的链接。

安装 OpenSSH

您还需要安装 OpenSSH。 OpenSSH 是 PSRemoting 用于连接到远程 Linux 计算机的软件包。您可以使用 Get-WindowsCapability cmdlet 通过 PowerShell 安装 OpenSSH,如下所示。

取决于您是否打算将 Windows 主机作为客户端和/或服务器,取决于您应该安装哪些 Windows 功能。如果您从 Windows Server 连接到 Linux,则只需要 OpenSSH 客户端。如果您从 Linux 连接到 Windows Server,则只需要 OpenSSH 服务器。

下面的命令查找名称以 OpenSSH 开头的所有 Windows 功能并安装它们,以便同时安装客户端和服务器。

Get-WindowsCapability -Online | Where-Object {$_.Name -like 'OpenSSH*'} | Add-WindowsCapability -Online

如果您只想安装客户端,请将 Where-Object 脚本块中的过滤器更改为 OpenSSH.Client*,对于服务器,过滤器应为 OpenSSH.Server*.

相关:SSH 和 PowerShell 入门

启动 SSH 服务器

OpenSSH 安装后,会在端口 22 上打开 Windows 防火墙,但不会启动 OpenSSH 服务器服务来侦听该端口。要在 Windows Server 上启动 OpenSSH 服务器,请运行以下 PowerShell 命令来启动 OpenSSH 服务器并将服务设置为在启动时启动。

Start-Service sshd
Set-Service sshd -StartupType Automatic

配置 OpenSSH 配置

下一步是修改sshd_config 守护进程配置文件。在此文件中,您必须首先确认已启用密码身份验证,并添加 PowerShell 子系统

本教程的这一部分是使用密码设置最简单的方法。您将在本教程后面学习如何使用证书设置 SSH 身份验证。

  1. 在您最喜欢的文本编辑器中打开配置文件(位于 C:\ProgramData\ssh\sshd_config)。

2. 确认启用密码身份验证,其中密码身份验证行在开头用 # 注释掉,或者设置为 yes

[玩转系统] PSRemoting Linux 和 Windows 简介:如何指导

3. 添加PowerShell 子系统。对于 PowerShell 7,添加行:Subsystem powershell c:/progra~1/powershell/7/pwsh.exe -sshs -NoLogo

  • -sshs 选项用于允许 PowerShell 7 作为子系统在 SSH 中运行。
  • -NoLogo 选项使 PowerShell 在启动时隐藏版权信息,从而确保启动 SSH 会话时不会出现意外输出。

4. 保存并关闭配置文件。

5. 重新启动 sshd Windows 服务。您可以通过运行 Restart-Service sshd 使用 PowerShell 来执行此操作。

您现在应该已配置好所需的一切,以便使用 PSRemoting 通过 SSH 从(客户端)连接到此 Windows Server(服务器)。

为通过 SSH 的 PSRemoting 设置 Linux(服务器)

接下来是具有类似设置的 Linux;安装 PowerShell 并配置 OpenSSH。

请注意,由于我们使用的是 CentOS,如果您使用不同的发行版,某些命令可能会有所不同。

安装 PowerShell 7+

首先,安装 PowerShell 7。本教程不会介绍如何执行此操作。相反,请务必查看以下链接。

相关:如何在 Windows、macOS 和 Linux 上下载并安装 PowerShell 7

配置 OpenSSH

与 Windows Server 一样,您需要 OpenSSH。但与 Windows 不同的是,OpenSSH 可能已经安装。对于运行 CentOS 8 的本教程,Linux 计算机默认已安装客户端和服务器,但您可以使用以下命令进行检查:

rpm -qa openssh*

如果安装了客户端和服务器,您应该会得到类似于下面的输出。

[玩转系统] PSRemoting Linux 和 Windows 简介:如何指导

通过以下方式配置 SSH 配置文件:

  1. 通过运行 sudo vi /etc/ssh/sshd_config 打开 sshd_config 文件。

2. 添加 PowerShell 子系统,就像在 Windows Server 上一样,将以下行添加到配置文件中。

Subsystem powershell /usr/bin/pwsh -sshs -NoLogo

3. 退出vi 并保存文件。

4. 通过运行 sudo systemctl restart sshd 重新启动 ssh 守护程序以应用更改。

默认情况下,大多数实例(包括 CentOS 8)都会启用密码和公钥身份验证。无需在此处添加这些内容。

使用密码身份验证连接到 Windows/Linux 或从 Windows/Linux 连接

一旦您在 Linux 和 Windows 计算机上完成了所有设置,就可以充分利用您所做的工作了。现在让我们尝试使用密码身份验证从 Windows 连接到 Linux,反之亦然。

基于密码的身份验证看起来和感觉与使用带有用户名和密码的 SSH 很熟悉。

连接命令

要测试通过 SSH 从 Windows 到 Linux 或从 Linux 到 Windows 的 PSRemoting 连接,让我们使用使用 Invoke-Command cmdlet 的“临时”会话以及使用 的持久会话新-PSSession

相关:Invoke-Command:运行远程代码的最佳方式

使用 Invoke-Command 测试 PSRemoting 连接:

  1. 打开 PowerShell 7 控制台。

2. 设置 Invoke-Command cmdlet 的参数。在这种情况下,以下参数将使用 SRV1 上名为 User 的本地用户帐户连接到名为 SRV1 的计算机。

$SessionParams = @{
     HostName = SRV1
     UserName = user
     SSHTransport = $true
 }

3. 通过展开上面的参数并运行命令(在本例中为脚本块内的 Get-Process)来运行 Invoke-Command

相关:PowerShell Splatting:它是什么以及它如何工作?

Invoke-Command @SessionParams -ScriptBlock {Get-Process}

然后,您应该会看到 SRV1 计算机上所有正在运行的进程的列表。

您还可以建立持久连接,允许您通过以下方式连接和交互运行命令:

  1. 提供上述参数并将它们传递给 New-PSSession cmdlet。

2. 使用 Enter-PSSession cmdlet 以交互方式连接到该会话。

Create a persistent session
 $session = New-PSSession @SessionParams
 Connect interactively
 Enter-PSSession -Session $session

3. 运行上面的 Enter-PSSession 命令后,系统会提示您输入用户密码。经过身份验证后,您将在 PowerShell 中连接到另一台计算机。

请注意,上述命令都不需要通用的 Credential 参数来提供连接的用户名和密码。相反,我们使用了 SSHTransport 参数。 SSH 不使用与 Windows 从一台 Windows 计算机转到另一台 Windows 计算机相同的身份验证过程,因此它无法解释 PSCredential 对象。

相关:使用 PowerShell Get-Credential cmdlet 和所有凭证。

使用这种方法,您还可以利用断开连接的会话。

设置基于公钥的身份验证

虽然基于密码的身份验证易于设置且易于使用,但它有两个问题。

  • 如果没有人手动安全地运行命令,就无法进行身份验证。
  • 您正在通过网络发送密码。

在本例中,虽然密码在 SSH 连接中进行了加密,但服务器会以明文形式接收密码。如果服务器以某种方式受到损害,则可能会成为安全问题。

生成公钥/私钥

当使用任何类型的公钥身份验证时,您必须首先从客户端生成公钥。此要求适用于 Linux 和 Windows。

在 Linux 或 Windows Server 计算机上:

  1. 运行ssh-keygen来生成密钥对。

如果您在 Linux 上运行 ssh-keygen,请注意它默认会生成 RSA 密钥对。许多新的 Linux 操作系统默认不允许使用 RSA 密钥对进行身份验证。要纠正此问题,请使用ssh-keygen -t ed25519

2. 系统将提示您输入存储私钥的路径以及用于加密私钥的密码。如果您不想在身份验证期间提供密码,可以将密码留空。

3.仅限 Windows:从 PowerShell 运行以下命令,其中 是您的配置文件的路径(可能C:\Users\UserName )。

Set-Service ssh-agent -StartupType Automatic
 Start-Service ssh-agent
 ssh-add .ssh\id_ed25519
 Remove-Item ~.ssh\id_ed25519

Windows 的 OpenSSH 实现有一个 ssh-agent 服务,允许您在登录用户的 Windows 安全上下文中存储私钥。这将使您能够将 SSH 私钥导入到 ssh-agent 并然后从文件系统中删除密钥以进一步保护它。

4. 现在将生成的公钥 (\.ssh\id_ed25519.pub) 复制到您要连接的服务器。 Windows 没有提供执行此复制的工具,因此可以使用 SCP 来完成。运行以下命令将公钥复制到 Linux 计算机。

scp C:\Users\Username.ssh\id_ed25519.pub username@ServerB:~/.ssh/authorized_keys

要从 Linux 复制到 Windows:

scp ~/.ssh/id_ed25519.pub administrator@ServerA:.ssh/authorized_keys

5. 输入登录用户的密码。输入后,PowerShell/Bash 将复制密钥,并且您将与远程计算机断开连接。

使用公钥身份验证连接到 Windows/Linux 或从 Windows/Linux 连接

设置公钥和私钥后,连接到 Windows 和 Linux 应该很容易。它与基于密码的身份验证几乎相同。

要在 Windows 上使用公钥进行连接,请使用上面连接命令中所示的相同命令。您只会注意到一处差异;不会提示您输入凭据。

下面是使用 -v 开关从 Linux 连接到 Windows 的示例,以查看连接过程中发生的情况。

[玩转系统] PSRemoting Linux 和 Windows 简介:如何指导

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

取消回复欢迎 发表评论:

关灯