Oracle Cloud 甲骨文云使用 API(OCI)创建 VNC 连接和串行连接

小助手读文章 00:00 / 00:00

温馨提示:
本文所述内容具有依赖性,可能因软硬条件不同而与预期有所差异,故请以实际为准,仅供参考。

有时候由于意外情况,导致无法直接连接到虚拟机实例,这时候 VNC 或者串行就派上用场了。

一、VNC 连接和串行连接是什么?

简单来讲,就是在虚拟机之上的母机中,开启一条通道来连接虚拟机,至于是 VNC 还是串行,本质上并无不同,看自己用哪个方便。
VNC 一般是用于当跳板来连接虚拟机,串行则是直接连接虚拟机。

另外,VNC 连接和串行连接,准确来讲,应该叫 VNC 控制台连接、串行控制台连接。

二、使用先决条件

为方便说明,简单画个流程图

客户端电脑 A ---> 创建连接的电脑 B ---> 创建的 Oracle 连接 ---> 实际要连接的 Oracle Cloud 虚拟机

其中 A 与 B 可以是同一台电脑。

对于电脑 B:

1、既然是利用 OCI 命令,那么一切开始之前,需要先配置好 OCI 环境,可参见之前的文章《Oracle Cloud 甲骨文云对象存储 ObjectStorage API(OCI)详细使用说明》中的“环境配置”一节,这里不再赘述。

对于电脑 A 与 B:

2、还需要 SSH 密钥对,可以与创建实例时使用的一样,连接本质上还是利用 SSH 来加密,所以开始之前需要准备好。配置过程若出现密钥格式错误,可参见文章《Oracle Cloud 甲骨文云控制台添加 API 密钥格式错误问题》处理。

以上两个是创建连接的前提条件,使用时:

对于电脑 A 或 B:

3、若是 Windows:plink.exe(PuTTY 附带的命令链接连接工具。您可以安装 PuTTY 或 plink.exe 单独安装);

对于电脑 A,若要使用 VNC 连接,则需要先安装支持 VNC 协议的客户端。

三、创建连接

1、首先使用命令获取虚拟机实例 ID:

root@oc-jp:~# oci compute instance list --query "data[*].{NAME:\"display-name\",ID:\"id\",COMPARTMENTID:\"compartment-id\",SHAPE:\"shape\",DOMAIN:\"availability-domain\",DATE:\"time-created\",STATE:\"lifecycle-state\",REGION:\"region\"}"
[
  {
    "COMPARTMENTID": "ocid1.tenancy.oc1..***",
    "DATE": "2019-09-18T15:18:14.856000+00:00",
    "DOMAIN": "cBpy:AP-TOKYO-1-AD-1",
    "ID": "ocid1.instance.oc1.ap-tokyo-1.***",
    "NAME": "oc-jp",
    "REGION": "ap-tokyo-1",
    "SHAPE": "VM.Standard.E2.1.Micro",
    "STATE": "RUNNING"
  }
]

注意,如果有多台虚拟机,则会返回多个结果,注意区分到底要操作哪台虚拟机。

2、然后检查一下是否已存在生效的连接(没有才需要创建不是吗?):

root@oc-jp:~# oci compute instance-console-connection list --instance-id ocid1.instance.oc1.ap-tokyo-1.** --query "data[*].{INSTANCE:\"instance-id\",CONNECTION:\"connection-string\",VNC:\"vnc-connection-string\"}"
[
  {
    "CONNECTION": "ssh -o ProxyCommand='ssh -W %h:%p -p 443 ocid1.instanceconsoleconnection.oc1.ap-tokyo-1.**@instance-console.ap-tokyo-1.oci.oraclecloud.com' ocid1.instance.oc1.ap-tokyo-1.**",
    "INSTANCE": "ocid1.instance.oc1.ap-tokyo-1.**",
    "VNC": "ssh -o ProxyCommand='ssh -W %h:%p -p 443 ocid1.instanceconsoleconnection.oc1.ap-tokyo-1.**@instance-console.ap-tokyo-1.oci.oraclecloud.com' -N -L localhost:5900:ocid1.instance.oc1.ap-tokyo-1.**:5900 ocid1.instance.oc1.ap-tokyo-1.**"
  }
]

I、若有返回结果,说明有生效的连接,可以直接使用,其中 CONNECTION 是串行连接,VNC是 VNC 连接。

II、若没有返回结果,则需要新创建连接;

3、新创建连接(VNC 和串行是一起的,只要运行一次即可):

root@oc-jp:~# oci compute instance-console-connection create --instance-id ocid1.instance.oc1.ap-tokyo-1.*** --ssh-public-key-file SSH公钥路径
{
  "data": {
    "compartment-id": "ocid1.tenancy.oc1..***",
    "connection-string": "ssh -o ProxyCommand='ssh -W %h:%p -p 443 ocid1.instanceconsoleconnection.oc1.ap-tokyo-1.***@instance-console.ap-tokyo-1.oci.oraclecloud.com' ocid1.instance.oc1.ap-tokyo-1.***",
    "defined-tags": {
      "Oracle-Tags": {
        "CreatedBy": "***",
        "CreatedOn": "2024-04-08T02:42:40.619Z"
      }
    },
    "fingerprint": "SHA256:***",
    "freeform-tags": {},
    "id": "ocid1.instanceconsoleconnection.oc1.ap-tokyo-1.***",
    "instance-id": "ocid1.instance.oc1.ap-tokyo-1.***",
    "lifecycle-state": "CREATING",
    "service-host-key-fingerprint": "SHA256:***",
    "vnc-connection-string": "ssh -o ProxyCommand='ssh -W %h:%p -p 443 ocid1.instanceconsoleconnection.oc1.ap-tokyo-1.***@instance-console.ap-tokyo-1.oci.oraclecloud.com' -N -L localhost:5900:ocid1.instance.oc1.ap-tokyo-1.***:5900 ocid1.instance.oc1.ap-tokyo-1.***"
  },
  "etag": "6fc8fd4771***"
}

返回如上数据,说明连接创建成功。

四、如何使用

在上一节中,我们已经获取到了串行连接(CONNECTIONconnection-string)和 VNC 连接(VNCvnc-connection-string)。

两者的区别在于,串行是可以直接本机连接到虚拟机实例(直接运行后面的命令);VNC 则是通过 VNC 服务开启了转发,可以在本机通过 VNC 客户端来连接(直接运行后面的命令),也可以在其他电脑通过 VNC 客户端来连接(将命令中的 localhost 改成 0.0.0.0,同理 5900 端口也可以改)。

比如我要在其他电脑通过 VNC 来连接虚拟机,则在本机运行 VNCvnc-connection-string 后面的命令 ssh -o ProxyCommand='ssh -W %h:%p -p 443 ocid1.instanceconsoleconnection.oc1.ap-tokyo-1.***@instance-console.ap-tokyo-1.oci.oraclecloud.com' -N -L 0.0.0.0:5900:ocid1.instance.oc1.ap-tokyo-1.***:5900 ocid1.instance.oc1.ap-tokyo-1.***

root@oc-jp:~# ssh -o ProxyCommand='ssh -W %h:%p -p 443 ocid1.instanceconsoleconnection.oc1.ap-tokyo-1.***@instance-console.ap-tokyo-1.oci.oraclecloud.com' -N -L 0.0.0.0:5900:ocid1.instance.oc1.ap-tokyo-1.***:5900 ocid1.instance.oc1.ap-tokyo-1.***
The authenticity of host '[instance-console.ap-tokyo-1.oci.oraclecloud.com]:443 ([140.204.8.241]:443)' can't be established.
RSA key fingerprint is SHA256:***.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '[instance-console.ap-tokyo-1.oci.oraclecloud.com]:443,[140.204.8.241]:443' (RSA) to the list of known hosts.

=================================================
IMPORTANT: Use a console connection to troubleshoot a malfunctioning instance. For normal operations, you should connect to the instance using a Secure Shell (SSH) or Remote Desktop connection. For steps, see https://docs.cloud.oracle.com/iaas/Content/Compute/Tasks/accessinginstance.htm

For more information about troubleshooting your instance using a console connection, see the documentation: https://docs.cloud.oracle.com/en-us/iaas/Content/Compute/References/serialconsole.htm#four
=================================================
The authenticity of host 'ocid1.instance.oc1.ap-tokyo-1.*** (<no hostip for proxy command>)' can't be established.
RSA key fingerprint is SHA256:***.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'ocid1.instance.oc1.ap-tokyo-1.***' (RSA) to the list of known hosts.

然后就可以在客户端通过 VNC 连接本机 IP:5900 来连接虚拟机了。需注意的是,这里的 VNC 连接时不需要输入密码,所以应注意保密连接。另外,不管是串行还是 VNC,默认都只有 5 分钟保活,即超时没有连接会自动断开,需要重新运行连接命令(非创建,是连接)。

五、Q&A

1、Q:运行命令时出现Error: Missing option(s) --compartment-id错误?
A:在示例中,并没有包含此参数,是因为我已经将常用命令参数在 oci_cli_rc 中指定了,若你未指定,则需要输入完整命令:oci compute instance-console-connection list --instance-id ocid1.instance.oc1.ap-tokyo-1.** --compartment-id ocid1.tenancy.oc1..*** --query "data[*].{INSTANCE:\"instance-id\",CONNECTION:\"connection-string\",VNC:\"vnc-connection-string\"}"

2、Q:运行创建连接命令时,提示ssh_exchange_identification: Connection closed by remote host,直接退出了?
A:这个错误是 SSH 密钥登陆的错误,上面已经提到,不管是串行还是 VNC,本质上都是 SSH 加密转发,因此运行时会先校验公钥私钥,所以只要把私钥放到当前用户目录下的 .ssh 目录下即可,其中,文件名应为 id_rsa


参考文章:

1、《Creating an Instance Console Connection


ArmxMod for Typecho
个性化、自适应、功能强大的响应式主题

推广

 继续浏览关于 部署教程api解决方案云服务器oracle甲骨文云主机 的文章

 本文最后更新于 2024/04/08 11:27:01,可能因经年累月而与现状有所差异

 引用转载请注明: VirCloud's Blog > 经验 > Oracle Cloud 甲骨文云使用 API(OCI)创建 VNC 连接和串行连接