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

[玩转系统] PowerShell SSH 客户端和远程处理说明

作者:精品下载站 日期:2024-12-14 03:40:59 浏览:15 分类:玩电脑

PowerShell SSH 客户端和远程处理说明


您需要管理远程服务器或网络设备吗?那么您可能正在使用 SSH 来连接和管理它们。 SSH 协议允许您通过不安全的网络(互联网)安全地连接到远程设备。要使用 SSH,大多数人都会使用 SSH 客户端工具,例如 Putty。但您是否知道PowerShell 有一个内置的 SSH 客户端

Windows 10 1809 及更高版本中默认启用 PowerShell SSH 客户端。这意味着您现在可以轻松地从您最喜欢的命令行工具连接到任何远程设备。

我们还可以在 PowerShell 中使用 SSH 远程管理另一台 Windows 计算机,但您需要使用 PowerShell 6 或更高版本来运行 SSH 服务器。

PowerShell SSH 客户端

在 PowerShell 中使用 SSH 最常见的方法是作为 SSH 客户端。假设您使 Windows 保持最新状态,则默认情况下应该启用 SSH。您只需打开 PowerShell 并键入以下命令即可检查它:

# type ssh and press enter
ssh

# Result:
usage: ssh [-46AaCfGgKkMNnqsTtVvXxYy] [-B bind_interface]
           [-b bind_address] [-c cipher_spec] [-D [bind_address:]port]
           [-E log_file] [-e escape_char] [-F configfile] [-I pkcs11]
           [-i identity_file] [-J [user@]host[:port]] [-L address]
           [-l login_name] [-m mac_spec] [-O ctl_cmd] [-o option] [-p port]
           [-Q query_option] [-R address] [-S ctl_path] [-W host:port]
           [-w local_tun[:remote_tun]] destination [command]

打开 PowerShell 后,您可以使用单个命令连接到远程服务器或网络设备:

ssh <username>@<host_ip_address>

# For example:
ssh [email protected]

您还可以使用主机名而不是 IP 地址。如果您不提供用户名,则将使用您的本地用户帐户。

当您按 Enter 键时,您将需要输入 SSH 用户的密码。当您第一次连接到设备时,您将需要接受主机的密钥。只需按 Enter 或输入 yes 即可。

[玩转系统] PowerShell SSH 客户端和远程处理说明

如果 SSH 在默认端口 22 之外的其他端口上运行,则可以使用 -P 标志更改端口号:

ssh <username>@<host_ip_address> -P <port_number>

# For example
ssh [email protected] -P 1022

PowerShell SSH 注册机

某些远程服务器或服务仅允许使用 SSH 密钥进行 SSH 访问。您需要生成本地 SSH 密钥并将密钥上传到服务器(或服务),以便它可以验证您并创建安全连接。

SSH 密钥存在于私钥和公钥中。您需要将私钥保存在本地计算机上(并确保您自己保管),并将公钥上传到服务器。

PowerShell 有一个内置的 SSH 密钥生成器,您可以使用它来生成新密钥。键入以下命令来生成密钥:

ssh-keygen -t Ed25519

# Result
Generating public/private Ed25519 key pair.
Enter file in which to save the key (C:\Users\a-d/.ssh/id_ed25519): <press enter>

# It will ask for apassphrase, you can leave it empty - see below for more details
Enter passphrase (empty for no passphrase):
Enter same passphrase again:

# Generated key
Your identification has been saved in C:\Users\a-d/.ssh/id_ed25519.
Your public key has been saved in C:\Users\a-d/.ssh/id_ed25519.pub.
The key fingerprint is:
SHA256:1232131+ASdi123SscvBbwn9Qfxj0 a-d@lab01
The key's randomart image is:
+--[ED25519 256]--+
| .o .            |
|..o+ .           |
|o..o .   o       |
|+..# o .         |
|=.+ =...S.       |
|.+.C.+. + E      |
|. *o@OO O. .     |
| = O*o  .        |
|. +++.           |
+----[SHA256]-----+

选项 -t Ed25519 是用于创建密钥的较新算法。在旧系统上,这可能不受支持。然后您可以使用旧的 RSA 加密系统。

ssh-keygen -b 4096 -t RSA

密钥存储在您的用户配置文件中。路径显示在输出中,但通常它们保存在以下位置:

%userprofile%\.ssh

SSH 注册机密码

在创建 ssh 密钥期间,系统会要求您输入密码或将其留空(默认)。密码用于加密本地密钥。这样您就可以安全地存储本地密钥。如果任何人获得了密钥,那么如果没有密码短语,他们就无法使用它。

但在使用密码之前,您需要记住一件重要的事情。每次使用 SSH 密钥时都需要输入密码。大多数时候 SSH 密钥用于自动化,例如 GitHub 服务。在这些用例中,不能选择使用密码。

使用 SSH 的 PowerShell 远程连接

我们还可以在PowerShell中使用SSH来建立与另一台计算机或服务器的远程连接。这可以在 Windows 计算机或 Windows-Linux 之间进行,反之亦然。

使用 WinRM 已经可以在两台 Windows 计算机之间创建 PowerShell 远程会话。但您现在还可以使用 SSH 创建连接。 SSH 的优点是您可以在 Windows、Linux 和 macOS 上使用它。

您将需要 PowerShell 6 或更高版本才能使用 SSH 在 Windows 和 Linux 计算机之间进行远程连接。我在下面的示例中使用 PowerShell 7。

安装 OpenSSH 服务器

第一步是在 Windows 计算机上安装 OpenSSH 服务器。如前所述,SSH 客户端现已默认安装并启用。但 SSH 服务器不是。

您可以使用以下 cmdlet 检查是否安装了 OpenSSH 服务器:

Get-WindowsCapability -Online | ? Name -like 'OpenSSH*'

# Result:
Name  : OpenSSH.Client~~~~0.0.1.0
State : Installed

Name  : OpenSSH.Server~~~~0.0.1.0
State : NotPresent

正如您所看到的,OpenSSH 服务器不存在。我们可以使用 PowerShell 安装/启用它:

Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0

下一步是启动 OpenSSH 服务器。因为它是一个我们可以设置为自动启动的服务:

# Start the sshd service
Start-Service sshd

# Set the service to automatic start
Set-Service sshd -StartupType Automatic

配置 SSH 服务器

我们需要编辑 SSHD 配置文件,以便可以使用密码进行身份验证并在远程计算机上使用 PowerShell。

如果我们不配置 SSH 服务器,那么我们只能在远程计算机上使用基本命令(Windows Shell 提示符)。

[玩转系统] PowerShell SSH 客户端和远程处理说明

为了充分使用所有 PowerShell cmdlet,我们需要配置 SSH 服务器以将 PowerShell 添加为子系统。

SSHD 配置文件存储在programdata 文件夹中。因为我们已经打开了 PowerShell,所以我们将使用它来打开配置文件:

# Change the directory to the programdata folder> ssh
cd $env:ProgramData\ssh

# Open the configuration file in notepad
PS C:\ProgramData\ssh> notepad .\sshd_config

在配置文件中,删除 PasswordAuthentication yes 行之前的 #,并在配置文件中添加以下行。 (位置并不重要,但我在“# override default of no Subsystems”部分下面添加了)

Subsystem powershell c:/progra~1/powershell/7/pwsh.exe -sshs -NoLogo -NoProfile

重新启动 SSHD 服务以加载新的配置文件:

Restart-service sshd

使用 PowerShell 进行 SSH 远程处理

在服务器上安装 SSH 服务器后,我们现在可以在客户端上使用 PowerShell 连接到它。我们可以使用与 WinRM 远程处理相同的 cmdlet,区别在于主机名与计算机名称。

  • 新 PS 会话
  • 输入-PSSession
  • 调用命令

如果您使用New-PSSession -Computername,则将使用 WinRM 协议。当您使用参数 -hostname 时,将使用 SSH。

[玩转系统] PowerShell SSH 客户端和远程处理说明

您可以按如下方式启动新的 PowerShell 远程处理会话:

# Directly open a remoting session
Enter-PSSession -HostName la-srv-lab01 -UserName admin

# Create a new session
$session = New-PSSession -HostName la-srv-lab01 -UserName admin

# Invoke a command on the remote machine
Invoke-Command -Session $session -ScriptBlock {Get-Process -Name "Explorer"}

# Result:
 NPM(K)    PM(M)      WS(M)     CPU(s)      Id  SI ProcessName   PSComputerName
 ------    -----      -----     ------      --  -- -----------   -------------
    517    49,78     122,99      24,83    3532   1 explorer      la-srv-lab01

另请注意,我们使用参数 -Username 而不是 WinRM 方法中的 -Credentials

我们可以使用 Invoke-Command cmdlet 运行远程 PowerShell 命令,或者使用 Enter-PSSession 在服务器上打开 PowerShell。

[玩转系统] PowerShell SSH 客户端和远程处理说明

管理多个 SSH 连接

Putty 等工具的优点是您可以管理和保存 SSH 连接。这使您可以轻松地重新连接到您经常使用的服务器或网络设备。

使用 Windows Terminal,您可以实现同样的目标。新的 Windows 终端允许您轻松存储不同的连接并使用不同的命令行界面。

[玩转系统] PowerShell SSH 客户端和远程处理说明

如果您想了解有关 Winows 终端的更多信息,请务必阅读这篇文章,我在其中解释了有关这个功能强大的终端的所有详细信息。

总结

将 SSH 与 PowerShell 结合使用确实非常方便,并且无需额外的工具(SSH 客户端)。就我个人而言,我经常使用 PowerShell,因此当我需要在服务器上检查或执行某些操作时,从 PowerShell 窗口快速连接到它非常容易。

我希望这篇文章对您有用,如果您有任何疑问,请在下面发表评论。

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

取消回复欢迎 发表评论:

关灯