# 访问虚拟机

## 背景信息

创建虚拟机实例后，你需要远程控制和管理它们。以下是几种远程访问方法。

* **RDP（远程桌面协议）**\
  RDP 是一种常用的远程桌面协议，用于远程管理 Windows 操作系统。\
  建议通过 RDP 远程连接到 Windows 虚拟机。
* **SSH（安全外壳协议）**\
  SSH 是一种基于命令行的远程管理工具，使用安全的网络协议。SSH 广泛用于类 UNIX 操作系统，包括 Linux、BSD 和 macOS。\
  建议使用终端或 Windows PowerShell 建立与非 Windows 虚拟机的 SSH 连接。
* **RFB（远程帧缓冲协议）**\
  RFB 是一种用于图形远程管理的协议。VNC（虚拟网络计算）是基于 RFB 协议的常见图形远程管理工具，适用于类 UNIX 操作系统。VNC 登录提供了一个图形桌面环境，使你能够直观地与虚拟机交互。VNC 协议在多种操作系统和平台上也广泛支持，更加灵活和兼容。\
  建议通过 VNC 远程访问和控制虚拟机的图形界面。

这些协议和工具提供了多种远程访问和管理虚拟机的方式。RDP 为 Windows 虚拟机提供了图形界面；SSH 为类 UNIX 虚拟机提供了命令行界面的远程管理；VNC 则支持跨操作系统的图形远程管理。

这里以 Linux 虚拟机 (`CentOS-1vcpu-2gb-HKG-1`) 和 Windows 虚拟机 (`Windows-1vcpu-2gb-IAD-1`) 为例，演示如何使用本地计算机远程访问它们。

* `CentOS-1vcpu-2gb-HKG-1`\
  默认用户名: `root`\
  密码: `Test+123`
* `Windows-1vcpu-2gb-IAD-1`\
  默认用户名: `Administrator`\
  密码: `Test+123`

<div align="left"><figure><img src="https://2318250923-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F0CBWy7DFFtkhyEC9R4kE%2Fuploads%2Fgit-blob-623959e7aac6f52e947d3175436a177ae98d2f94%2Fimage%20(2)%20(4).png?alt=media" alt=""><figcaption></figcaption></figure></div>

{% hint style="info" %} <mark style="color:blue;">**注意**</mark>

* <mark style="color:blue;">有关如何创建虚拟机实例的详细信息，请参阅</mark> [<mark style="color:purple;">**创建实例**</mark>](https://docs.console.zenlayer.com/welcome/cn/virtual-machine/get-started/virtual-machine-instance/create-an-instance) <mark style="color:blue;">。</mark>
* <mark style="color:blue;">在创建虚拟机实例时，至少会关联一个安全组。要成功远程访问，请确保安全组允许以下端口的流量：TCP 22（用于 SSH）、TCP 3389（用于 RDP）和 ICMP 端口（用于网络管理和调试）。</mark>
* <mark style="color:blue;">以下步骤可能因使用的操作系统和应用程序而异。你可能需要使用不同的命令或工具来执行相同的操作。</mark>
  {% endhint %}

## 通过 SSH 访问 Linux 虚拟机

当你需要访问 Linux 虚拟机时，可以使用 SSH。假设你在使用 macOS 终端和 Windows PowerShell。

如果你已将 SSH 公钥部署到服务器上，也可以使用 SSH 密钥进行身份验证，无需输入密码。

{% tabs %}
{% tab title="macOS 客户端（终端）" %}
**前提条件**

* 确保虚拟机已启用 SSH 并且正在运行。
* 获取你要访问的虚拟机的公网 IP 地址，即 Linux 虚拟机 (`CentOS-1vcpu-2gb-HKG-1`)。你可以在 zenConsole 的实例列表页面中找到此信息。这里为 `128.1.97.230`。

**操作步骤**

1. 打开 macOS 计算机上的 **终端** 应用程序。你可以在 **应用程序** > **实用工具** 文件夹中找到它，或者可以使用 **聚焦** 搜索它。
2. 在 **终端** 中，使用 SSH 命令和虚拟机的公网 IP 地址建立远程连接。命令语法如下：

   ```bash
   ssh root@128.1.97.230
   ```
3. 按 **Enter**，**终端** 将尝试与虚拟机建立 SSH 连接。如果是第一次连接到该虚拟机，系统可能会提示您通过验证主机密钥指纹来确认主机的真实性。键入 `yes` 以继续。
4. 在 SSH 连接成功建立后，您将被提示输入虚拟机上选定用户名的密码。这里提供 `Test+123` 并按 **Enter**。
5. 身份验证成功后，您将在 macOS 计算机上打开一个 **终端** 会话，但使用的是远程虚拟机的命令行界面。从此处，您可以执行命令并管理虚拟机。
   {% endtab %}

{% tab title="Windows 命令行 (PowerShell)" %}
**前提条件**

* 确保虚拟机已启用 PowerShell 远程管理和正在运行。PowerShell 远程管理在 Windows 操作系统上默认可用。
* 获取您要访问的虚拟机的公网 IP 地址，即 Linux 虚拟机 (`CentOS-1vcpu-2gb-HKG-1`)。您可以在 zenConsole 的实例列表页面中找到此信息。这里为 `128.1.97.230`。

**操作步骤**

1. 在 Windows 计算机上打开 **PowerShell** 应用程序。您可以通过在 **开始** 菜单中搜索 "**PowerShell**" 或按 `Win + X` 并选择 **Windows PowerShell** 或 **Windows PowerShell (管理员)** 来完成此操作。
2. 在 **PowerShell** 控制台中，使用以下命令与虚拟机建立远程会话：

   ```bash
   Enter-PSSession -ComputerName 128.1.97.230 -Credential root
   ```
3. 按 **Enter**。系统将提示您输入虚拟机上选定用户名的密码。这里提供 `Test+123` 并按 **Enter**。
4. 身份验证成功后，您将在本地计算机上打开一个 **PowerShell** 会话，但使用的是远程虚拟机的命令行界面。从此处，您可以执行 **PowerShell** 命令并管理虚拟机。
   {% endtab %}

{% tab title="SSH 密钥对" %}
\### 前提条件

获取您要访问的虚拟机的公网 IP 地址，即 Linux 虚拟机 (`CentOS-1vcpu-2gb-HKG-1`)。您可以在 zenConsole 的实例列表页面中找到此信息。这里为 `128.1.97.230`。

**操作步骤**

1. 在本地计算机上运行以下命令来生成 SSH 密钥对：

   ```bash
   ssh-keygen -t rsa -b 4096
   ```

   这将生成一个 4096 位的 RSA 密钥对，包含私钥和公钥。默认情况下，它们将保存在 `~/.ssh` 目录中。
2. 使用以下命令检索生成的公钥：

   ```bash
   cat ~/.ssh/id_rsa.pub
   ```

   这将显示您的公钥。复制它。

   {% hint style="info" %} <mark style="color:blue;">**注意**</mark>

   <mark style="color:blue;">对于 Windows 操作系统，使用</mark> <mark style="color:blue;">`type`</mark> <mark style="color:blue;">命令在命令提示符或 PowerShell 中显示公钥：</mark>

   ```bash
   type %userprofile%\.ssh\id_rsa.pub
   ```

   {% endhint %}
3. 使用 SSH 命令和公网 IP 地址访问虚拟机：

   ```bash
   ssh root@128.1.97.230
   ```
4. 按 **Enter**。这将尝试与虚拟机建立 SSH 连接。如果是第一次连接到该虚拟机，系统可能会提示您通过验证主机密钥指纹来确认主机的真实性。键入 `yes` 以继续。
5. 在 SSH 连接成功建立后，您将被提示输入虚拟机上选定用户名的密码。这里提供 `Test+123` 并按 **Enter**。
6. 在虚拟机上，打开 `~/.ssh/authorized_keys` 文件（如果不存在则创建）。您可以使用以下命令打开该文件：

   ```bash
   nano ~/.ssh/authorized_keys
   ```

   将先前获取的公钥粘贴到文件中并保存。

**结果**

您现在可以使用 SSH 密钥对访问虚拟机。运行以下命令：

```bash
ssh -i ~/.ssh/id_rsa root@128.1.97.230
```

这将使用私钥进行身份验证，而无需输入密码。
{% endtab %}
{% endtabs %}

## 通过 RDP 访问 Windows 虚拟机

当您需要访问 Windows 虚拟机时，建议使用 RDP。

### 前提条件

* 确保 Windows 虚拟机正在运行并且启用了 RDP。RDP 在 Windows 操作系统中默认可用。
* 获取您要访问的虚拟机（即 Windows VM (`Windows-1vcpu-2gb-IAD-1`)）的公网 IP 地址。您可以在 zenConsole 的实例列表页面中找到此信息。这里为 `98.96.218.54`。

### 步骤

1. 在您的本地计算机上打开 **Remote Desktop** 客户端应用程序。此应用程序内置于 Windows 中，您可以通过在 **Start** 菜单中搜索 "**Remote Desktop**" 来找到它。
2. 在 **Remote Desktop** 客户端中，输入虚拟机的公网 IP 地址，即 `98.96.218.54`，到 "**Computer**" 字段中。
3. 单击 **Connect** 以启动连接。
4. 如果提示输入虚拟机用户账户的凭据，请输入：\
   \- 默认用户名: `Administrator`\
   \- 密码: `Test+123`
5. 身份验证成功后，**Remote Desktop** 客户端将与 Windows 虚拟机建立连接。您将在本地计算机上看到虚拟机的桌面。
6. 现在您可以像坐在虚拟机前一样与 Windows 虚拟机进行交互。您可以运行应用程序、访问文件、配置设置以及在 Windows 桌面上通常执行的任何其他任务。

请确保在虚拟机和本地计算机上配置了必要的防火墙规则，以允许 RDP 连接。

## 通过 VNC 访问 Linux 虚拟机

您可以使用 VNC 远程访问 Linux 虚拟机。

### 前提条件

您可以在 zenConsole 中通过 VNC 远程访问任何虚拟机。请在远程访问之前获取您要访问的虚拟机（例如 Linux VM (`CentOS-1vcpu-2gb-HKG-1`)）的公网 IP 地址。

* 默认用户名: `root`
* 密码: `Test+123`

### 步骤

1. 转到虚拟机实例列表页面，点击 `CentOS-1vcpu-2gb-HKG-1` 进入 **Detail** 页面。

   <div align="left"><figure><img src="https://2318250923-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F0CBWy7DFFtkhyEC9R4kE%2Fuploads%2Fgit-blob-6b7edf5b245f614232b483f21331cb5fbf73a92f%2Fimage%20(19)%20(1)%20(1).png?alt=media" alt="" width="563"><figcaption><p>详情页面</p></figcaption></figure></div>
2. 单击 **VNC Access** 进入 VNC 访问界面。等待直到显示：

   ```bash
   Connected (encrypted) to: QEMU (instance-xxxxxxxx)
   ```

   输入默认用户名: `root`，然后按 **Enter**

   <div align="left"><figure><img src="https://2318250923-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F0CBWy7DFFtkhyEC9R4kE%2Fuploads%2Fgit-blob-6b1142f042db690933d757db64d72dc3b58e756c%2Fimage%20(1)%20(3).png?alt=media" alt=""><figcaption><p>VNC 访问</p></figcaption></figure></div>
3. 按 **Enter**，**Terminal** 将尝试建立 SSH 连接
4. 输入虚拟机的密码。这里提供 `Test+123` 并按 **Enter**。
5. 身份验证成功后，VNC 将与虚拟机建立连接。您应该在 VNC 客户端窗口中看到虚拟机的桌面或图形界面。
6. *<mark style="color:green;">(可选)</mark>* 您可以将代码粘贴到 **Clipboard** 中并单击 **Run** 快速执行命令。

## 通过 VNC 访问 Windows 虚拟机

您可以使用 VNC 远程访问 Windows 虚拟机。

### 前提条件

您可以在 zenConsole 中通过 VNC 远程访问任何虚拟机。请在远程访问之前获取您要访问的虚拟机（例如 Windows VM (`Windows-4vCPU-16gb-HKG-A-1`)）的公网 IP 地址。

### 步骤

1. 转到虚拟机实例列表页面，点击 `Windows-4vCPU-16gb-HKG-A-1` 进入 **Detail** 页面。

   <figure><img src="https://2318250923-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F0CBWy7DFFtkhyEC9R4kE%2Fuploads%2Fgit-blob-ad2dbdeee1de1c02e9fd11f866ef36a6596ecbb8%2Fimage%20(1)%20(1)%20(1)%20(1)%20(2).png?alt=media" alt=""><figcaption><p>VNC 访问</p></figcaption></figure>
2. 点击 **VNC 访问** 进入 VNC 访问界面。等待直到显示：

   ```bash
   Connected (encrypted) to: QEMU (instance-xxxxxxxx)
   ```
3. 前往 **快捷键** > **Ctrl+Alt+Del**.

   <div align="left"><figure><img src="https://2318250923-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F0CBWy7DFFtkhyEC9R4kE%2Fuploads%2Fgit-blob-f3849039f355dda464b987869dc1acf0bddfd609%2Fimage%20(2)%20(1)%20(1)%20(1)%20(2).png?alt=media" alt=""><figcaption></figcaption></figure></div>
4. 在您的邮箱中找到密码。点击 **剪贴板**，输入密码并点击 **运行**.

   <div align="left"><figure><img src="https://2318250923-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F0CBWy7DFFtkhyEC9R4kE%2Fuploads%2Fgit-blob-7604ebdf853a61225e0244d687f04165924a8035%2Fimage%20(3)%20(1)%20(1)%20(1)%20(2).png?alt=media" alt="" width="563"><figcaption></figcaption></figure></div>

## 摘要

上述提到的协议和访问方法在不同场景下提供了便利性和灵活性。您可以选择最适合您需求的方式远程访问和管理您的虚拟机，无论是使用图形用户界面还是命令行界面。

（译文中没有出现“Private IP”和“Public IP”这两个词条，因此不需要进行修改。）
