IBM Cloud Docs
使用 VNC 或串行控制台访问虚拟服务器实例

使用 VNC 或串行控制台访问虚拟服务器实例

您可以通过使用 IBM Cloud UI,API 请求或 IBM Cloud 命令行界面 (CLI) 连接到 VNC 或串行控制台来访问 IBM Cloud 虚拟服务器实例。 控制台服务是一种快速简便的方法,可供您在不使用安全 Shell 的情况下与实例进行交互。

仅适用于使用TDX保密计算的 z/OS 虚拟服务器和虚拟服务器实例:不支持将 z/OS 或TDX保密计算虚拟服务器实例连接到VNC控制台。

它适用于发生引导故障或内核崩溃的情况,尤其是在使用定制映像时。 发生这些情况时,您可以使用控制台服务来检查问题。

VNC 控制台提供图形用户界面,并接受鼠标和键盘输入。 串行控制台提供了一个基于文本的控制台,该控制台接受键盘输入。

您可以使用控制台来访问操作系统装入和引导过程,例如 GNU GRand Unified Bootloader (GRUB)。

可以使用任何 受支持的浏览器 打开控制台。

准备工作

  1. 要连接到控制台,您需要在 IBM Cloud Identity and Access Management (IAM)中为虚拟服务器实例分配 Operator (或更高)和 Console Administrator 角色。

    Console Administrator 角色不会自动应用。 如果您是账户管理员,还需要自行分配 Console Administrator 角色才能使用此功能。

    要检查是否为您分配了必需角色,请转至 IBM Cloud 控制台中的“IAM 用户”页面,然后在 用户下选择您的帐户,然后选择 访问策略。 确保您看到将 Operator (或更高版本) 角色和 VirtualServerConsoleAdmin 角色分配给目标虚拟服务器实例的 资源属性 的访问策略。 否则,您需要联系帐户管理员,以使用以下步骤为您分配角色:

    1. 转至 IBM Cloud 控制台中的“IAM 用户”页面,然后选择目标用户。
    2. 单击 访问选项卡,然后滚动到 访问策略
    3. 单击分配访问权
    4. 滚动到 创建策略 部分。
    5. Service 部分,选择 VPC 基础架构服务。 然后,单击下一步
    6. Resources 部分,选择 All resources
    7. 角色和操作中,选择以下服务访问权限:
      • 控制台管理员
    8. 然后,选择以下平台访问之一:
      • 运算符
      • 编辑者
      • 管理员
    9. 单击下一步
    10. 可选择添加条件。
    11. 点击 “评论”。
    12. 单击添加
    13. 查看 访问权摘要 侧窗格,然后单击 分配

    有关IAM角色的更多信息,请参阅 IAM入门

  2. IBM Cloud 提供的映像通常没有密码。 要使用控制台成功访问实例,您可能需要为 Linux 映像创建密码,或者提前检索 Windows 映像的密码。

对于串行控制台,您可以使用 -a root 标志将 getty 配置为在没有密码的情况下自动登录。

要对定制 Linux 映像启用串行控制台服务,请确保参数 console=ttyS0 在内核命令行上存在。 有关更多信息,请参阅 创建 Linux 定制映像 中的 步骤 1-从 qcow2 或 VHD 格式的单个映像文件开始

使用 IBM Cloud UI 连接到控制台

遵循以下步骤以使用 IBM Cloud UI 连接到控制台。

  1. IBM Cloud 控制台,转到 导航菜单 图标菜单图标 > 基础设施 VPC 图标 > 计算 > 虚拟服务器实例
  2. VPC 的虚拟服务器实例 列表中,单击需要访问的实例的溢出按钮,然后单击 打开 VNC 控制台打开串行控制台。 或者,在实例详细信息页面上,单击右上角的 操作,然后单击 打开 VNC 控制台打开串行控制台
  3. (仅适用于串行控制台) 如果正在使用串行控制台,那么系统会提示您确认是否强制打开会话。 此操作将断开其他用户的会话。
  4. 输入凭证并遵循提示以登录到实例。

您可以通过单击控制台窗口右上角的 关闭实例重新引导实例 来停止或重新启动实例。

使用 API 连接到控制台

在可以使用 API 请求连接到 VNC 或串行控制台之前,需要获取 IAM 令牌,将端点存储为变量,并验证您是否有权访问 VPC API 服务。 有关更多信息,请参阅 API 先决条件

使用 API 连接到 VNC 控制台

  1. 为实例创建一个控制台访问令牌。 在有效内容中指定 "console_type":"VNC"

      curl -X POST \
      "$vpc_api_endpoint/v1/instances/$instance_id/console_access_token?version=2021-01-26&generation=2" \
      -H "Authorization: $iam_token" \
      -d '{
            "console_type": "vnc"
      	  }'
    

    访问令牌将在 3 分钟后无效。

  2. 在响应中保存 "href" 的值。

  3. 在浏览器中打开 noVNC 门户网站

  4. 单击 设置 并展开 高级> WebSocket

  5. 选中加密,将第 2 步中保存的URL API 端点部分粘贴到 Host:,不要包含 "wss://",将端口设置为 "443",将第 2 步中保存的URL 路径部分粘贴到 Path

    • 示例 API 端点: us-south.iaas.cloud.ibm.com
    • 示例路径: v1/instances/<instance_id>/console?access_token=<access_token>&version=2020-12-06&generation=2
  6. 然后,单击连接

  7. 登录实例。

使用 API 连接到串行控制台

  1. 为实例创建控制台访问令牌,在有效内容中指定 "console_type": "serial""force": true

      curl -X POST \
      "$vpc_api_endpoint/v1/instances/$instance_id/console_access_token?version=2020-01-26&generation=2" \
      -H "Authorization: $token" \
      -d '{
         "console_type":"serial",
         "force": true
      }'
    

    通过指定 "force"true,您可以连接到串行控制台,即使控制台由其他用户使用也是如此。 缺省值为 false,这表示如果正在使用控制台,那么无法建立连接。

  2. 在响应中保存 "href" 的值。

  3. 使用URL 启动串行控制台程序。

    如果使用 websocat,请在命令中指定 --binary 标志。 例如, websocat --binary "wss://us-south.iaas.cloud.ibm.com/v1/instances/<instance_id>/console?access_token=<access_token>&version=2020-12-06&generation=2"

  4. 输入凭证并遵循提示以登录到实例。

使用 CLI 连接到控制台

确保通过遵循 CLI 先决条件 来设置 CLI 环境。

  1. 运行以下命令以连接到控制台:

    ibmcloud is instance-console $instance_id [-q, --quiet]
    

    此命令默认打开串行控制台。 要打开 VNC 控制台,请在命令中添加 "[--vnc] 标记,以获取控制台的URL。

  2. 根据您正在使用的控制台,执行下列其中一个步骤:

    • 对于 VNC 控制台,请遵循 步骤 2使用 API 连接到 VNC 控制台 中的 步骤 7
    • 对于串行控制台,请输入凭证并遵循提示以登录到实例。

与控制台断开连接

使用完控制台后,可以通过关闭终端或浏览器来断开与控制台的连接。

有关控制台服务的说明

  1. 控制台会话将在 10 分钟的空闲时间后到期。 它将在 60 分钟后关闭,而不考虑任何活动。

    某些操作系统在控制台上具有闪烁的光标,例如 Ubuntu 18.04。 使用 VNC 控制台访问使用此类操作系统的实例时,闪烁的光标会导致控制台会话在空闲 10 分钟后保持活动状态。 无论活动如何,控制台会话仍将在 60 分钟后关闭。

  2. 如果实例电源已关闭,那么控制台将断开连接。 在实例再次启动之前,无法重新建立连接。

  3. 重新启动,重置或不会导致重新调度实例的任何其他操作都会维护控制台连接。

  4. 每个实例的活动 VNC 控制台数限制为 2。 每个实例的活动串行控制台数限制为 1。

  5. 有关使用串行控制台对Linux虚拟服务器实例进行故障排除的信息,请参阅 如何使用Linux SysRq密钥从串行控制台对Linux虚拟服务器实例进行故障排除?