我们可以通过SSH连接到AWS的Windows EC2实例吗?

6

我刚接触 AWS,创建了一个新的 Windows EC2 实例。我看到可以使用 PuTTY 连接到不同实例,如 Amazon Linux、Ubuntu,但无法连接 Windows 实例。难道不能使用 PuTTY 连接 Windows 实例吗?谢谢。


2
是的,如果您已在Windows实例上安装并正确配置了SSH服务器,添加了相关的SSH公钥,并正确配置了相关的防火墙(AWS安全组加上Windows防火墙),那么您可以使用SSH连接到Windows实例。然而,通常情况下,您会使用远程桌面(RDP)来连接到Windows EC2实例。 - jarmod
6个回答

4

您可以通过SSH连接到在AWS上的LinuxMac实例。 您可以使用远程桌面(RDP)访问Windows实例

假设您想要SSH连接到Windows实例,那么您需要安装OpenSSH。 但是这仍然需要访问Windows实例。

AWS提供了几种访问Windows实例的方式,其中之一是AWS Systems Manager Session Manager (SSM)。您需要通过SSM启用RDP。您可以通过此workshop了解如何执行此操作。或者,配置SSM以针对该实例运行powershell命令。注意:实例必须具有IAM访问SSM的角色。如果实例位于私有VPC中,则需要通过endpoints访问SSM。
如果您的实例位于公共子网中,并且具有公共IP地址,则可以使用RDP轻松连接到Windows实例。请注意,就像运行Linux的EC2实例一样,安全组必须允许访问。在这种情况下,必须是RDP(3389),而不是SSH(端口22)。您可以阅读更多关于先决条件的信息here
创建Windows EC2实例时,系统会要求您创建一个密钥。假设您使用了AWS AMI,则可以使用此密钥获取Windows密码。
访问密码,请按照以下步骤操作(从此处的文档中获取):
  • 打开Amazon EC2控制台,然后选择“实例”。

  • 选择实例的复选框,然后展开“操作”下拉列表。如果您使用旧版控制台,则选择“获取Windows密码”。如果您使用新版控制台,则选择“安全性”,然后选择“获取Windows密码”。 注意:在首次启动新实例后,这个选项可能需要几分钟才能可用。

  • 选择“浏览”,选择您的密钥对文件,然后选择“打开”。

    -或-

  • 将您的密钥对内容粘贴到文本框中。 选择“解密密码”。

连接实例

在密码屏幕上,选择“下载远程桌面文件”。浏览器会提示您打开或保存RDP快捷方式文件。选择保存文件选项。下载完成后,选择“取消”返回到实例页面。

  • 进入您的下载目录并打开RDP快捷方式文件。

  • 您可能会收到一个警告,远程连接的发布者未知。选择“连接”以继续连接到您的实例。

  • 管理员帐户是默认选择的。复制并粘贴您之前保存的密码。

  • 您还可以使用EC2串行控制台来访问运行Windows的EC2实例,这对于调试启动问题非常有用。

  • 由于自签名证书的性质,您可能会收到一个警告,安全证书无法得到验证。使用以下步骤验证远程计算机的身份,或者如果信任该证书,则只需选择“是”(Windows)或“继续”(Mac OS X)。

有关连接详细信息,请访问此站点


此外,在连接到实例之后,可以(至少在 Windows Server 2019 基础版中)设置 SSH,但仍会要求用户输入密码。请参考链接:https://learn.microsoft.com/en-us/windows-server/administration/openssh/openssh_install_firstuse - Orkhan M.
@OrkhanM,当您从https://learn.microsoft.com/en-us/windows-server/administration/openssh/openssh_install_firstuse安装SSH时,您是如何连接到VM本身的?AWS控制台上是否需要进行任何操作? - Royi
@Royi 我刚刚发布了另一种答案,其中包含无人值守SSH访问的完整步骤。 - lafrenierejm

3
晚上好,答案是可以的,您可以从Windows / Linux和Mac(未尝试)SSH到Windows EC2实例。关键是您需要一个SSH服务器来接收来自客户端的ssh请求。
1. 确保您的Windows实例正在运行 2. RDP进入该实例(仅限一次) 3. 在命令行中键入“powershell”以切换出cmd 4. 运行以下命令以确定是否安装了OpenSSH.Server Get-WindowsCapability -Online | ? Name -like 'OpenSSH*'
5. 安装此服务
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
6. 大约等待一两分钟进行安装(请耐心等待) 7. 将服务设置为自动启动,以防您停止实例 Set-Service -Name sshd -StartupType 'Automatic'
8. 运行名为sshd的OpenSSH.Server服务 Start-Service sshd
9. 退出实例shell和RDP会话 10. 返回计算机上的shell 11. 运行您习惯的ssh命令以进入EC2实例。您将被要求输入密码。有办法绕过这个问题。

2
是的,最近发布的Windows操作系统(包括10 build 1809、Server 2019及以后版本)提供了官方支持本地OpenSSH守护程序。关于Windows上的OpenSSH的详细信息,请参见https://learn.microsoft.com/en-us/windows-server/administration/openssh/openssh_install_firstuse?tabs=powershell
如果想要使用SSH连接到EC2实例,我发现最简单的方法是构建一个预安装OpenSSH软件包并预配置相关服务的新AMI映像。目前对我有效的完整过程如下:
  1. Build a Windows AMI based on Server 2019 or later (e.g. use Windows_Server-2019-English-Full-ECS_Optimized-2022.12.14 as the base AMI). As part of that AMI:

    1. Install OpenSSH and configure the sshd and ssh-agent services as described in the above link:

      $ErrorActionPreference = 'Stop'
      
      Write-Host 'Installing and starting sshd'
      Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
      Set-Service -Name sshd -StartupType Automatic
      Start-Service sshd
      
      Write-Host 'Installing and starting ssh-agent'
      Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0
      Set-Service -Name ssh-agent -StartupType Automatic
      Start-Service ssh-agent
      
      Write-Host 'Set PowerShell as the default SSH shell'
      New-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" -Name DefaultShell -Value (Get-Command powershell.exe).Path -PropertyType String -Force
      
    2. Configure PowerShell as the default SSH shell:

      New-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" -Name DefaultShell -Value (Get-Command powershell.exe).Path -PropertyType String -Force
      
  2. Launch an EC2 instance using the new AMI:

    1. Provide a valid, existing SSH keypair.

    2. Select IMDSv2.

    3. Provide the following PowerShell script as the userdata script. This script will ensure the SSH keypair specified when launching will be added to the the Administrator user's authorized keys file. Note that the <powershell> and </powershell> tags are part of the userdata; they are parsed and extracted by AWS prior to the script being executed.

      <powershell>
      
      # Userdata script to enable SSH access as user Administrator via SSH keypair.
      # This assumes that
      # 1. the SSH service (sshd) has already been installed, configured, and started during AMI creation;
      # 2. a valid SSH key is selected when the EC2 instance is being launched; and
      # 3. IMDSv2 is selected when launching the EC2 instance.
      
      # Save the private key from instance metadata.
      $ImdsToken = (Invoke-WebRequest -Uri 'http://169.254.169.254/latest/api/token' -Method 'PUT' -Headers @{'X-aws-ec2-metadata-token-ttl-seconds' = 2160} -UseBasicParsing).Content
      $ImdsHeaders = @{'X-aws-ec2-metadata-token' = $ImdsToken}
      $AuthorizedKey = (Invoke-WebRequest -Uri 'http://169.254.169.254/latest/meta-data/public-keys/0/openssh-key' -Headers $ImdsHeaders -UseBasicParsing).Content
      $AuthorizedKeysPath = 'C:\ProgramData\ssh\administrators_authorized_keys'
      New-Item -Path $AuthorizedKeysPath -ItemType File -Value $AuthorizedKey -Force
      
      # Set appropriate permissions on administrators_authorized_keys by copying them from an existing key.
      Get-ACL C:\ProgramData\ssh\ssh_host_dsa_key | Set-ACL $AuthorizedKeysPath
      
      # Ensure the SSH agent pulls in the new key.
      Set-Service -Name ssh-agent -StartupType "Automatic"
      Restart-Service -Name ssh-agent
      
      </powershell>
      
  3. Connect to the instance via SSH like normal. Provide the SSH keypair you specified when launching and user Administrator. For example:

    ssh -i ~/.ssh/my-keypair Administrator@my.ec2.instance
    

1
您可以通过 AWS Session Manager 连接到 Windows EC2。它允许您从基于浏览器的 shell 管理实例。像 SSH 一样,您可以从 SSM 提供的 shell 中管理 EC2。您可以从控制台执行 PowerShell 命令。
要使用 SSM,首先需要在实例中安装 ssm agent,并在 IAM 角色中授予 EC2 所需的 SSM 策略。
我相信 SSM agent 默认已安装在 Windows EC2 实例中。此外,AWS 提供了一个名为 AmazonSSMRoleForInstancesQuickSetup 的角色用于 EC2。您可以使用相同的角色或利用其中的策略。
连接方式:选择实例,在 Connect 选项中选择 Session manager。

1

PuTTy不是通常用于Windows机器的工具。虽然我相信可以为Windows机器设置SSH访问,但下面的方法更典型且更容易设置。

如果您有与EC2实例相关联的密钥对,则可以使用AWS控制台向您显示用户名和密码,以便通过提供pem文件来使用Windows远程桌面访问您的计算机。这还需要您在安全组中启用入站RDP访问(与SSH不同的端口)。

如果您只想要PowerShell访问,并且正在使用已安装SSM代理程序(例如Amazon Linux AMI)和具有所需SSM权限的角色的实例,则可以使用Session Manager进行连接。这不需要密钥对或直接网络访问您的计算机,因此这是一种更安全的方法,但需要进行更多设置。

这两种技术在下面的参考资料中有更详细的描述。

参考资料:


1

我们能够在AWS上通过SSH连接到Windows EC2实例吗?- 不行。

您可以使用RDP(远程桌面)连接Windows EC2。您可以从AWS控制台下载.rdp文件,方法是通过选择实例 -> 连接 -> RDP

SSH连接适用于基于Linux的EC2机器。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接