Oracle Cloud: WindowsクライアントからVNCコンソール接続してみてみた

コンソール接続を使用して、正常に動作していないインスタンスをリモートからトラブルシューティングできます。例:
　　・ インポートまたはカスタマイズしたイメージが正常に起動しない
　　・ 以前は稼働していたインスタンスが応答しなくなった
  
インスタンス・コンソール接続には、シリアル・コンソール接続とVNCコンソール接続の2種類があります。
VNCコンソール接続はSSHポート転送を使用して、ローカル・システムからインスタンスのコンソールにアタッチされたVNCサーバーへのセキュアな接続を作成します。

:::note warn
**重要**
　インスタンス・コンソール接続は、トラブルシューティングの目的でのみ使用します。管理および一般的な使用のために実行中のインスタンスに接続するには、かわりにセキュア・シェル(SSH)またはリモート・デスクトップ接続を使用します。[インスタンスへの接続](https://docs.oracle.com/ja-jp/iaas/Content/Compute/Tasks/accessinginstance.htm#Connecting_to_an_Instance)を参照してください。
:::

ということで、Windows PCから、VNCコンソール接続をしてみてみます。




# ■ 事前準備
## ● Puttyインストール
PowerShellを使用してWindowsクライアントからインスタンス上のVNCサーバーに接続する場合は、plink.exe と puttygen.exeが必要です。
plink.exeは、PuTTYに含まれているコマンド・リンク接続ツールです。PuTTYをインストールすることで使用できるようになります。
インストール情報は、http://www.putty.org を参照してインストール
![01_Puttyインストール01.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109087/f5df3920-28d2-bc38-01cb-af1f4ea31ab9.jpeg)


## ● ssh秘密鍵をPutty用.PPKファイルへ変換
コンソール接続作成時にssh鍵(秘密鍵と公開鍵)を事前に作成しておきます。
Windows接続では、puttygenコマンド実行してSSH秘密鍵をplink.exe用に.PPKファイルへ変換して使用する必要があります。

**1) puttygen実行**
PowerShellコンソールで、puttygenコマンド実行し、PuTTY Key Generator画面を表示
![02_Puttygen鍵変換01.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109087/80313b0d-7c76-560b-9089-e678e944ca15.jpeg)


**2) PuTTY Key Generator画面**
[Conversions]タブから、[Import key]をクリック
![02_Puttygen鍵変換02.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109087/f7fbaab1-244d-d6db-3943-30717a7c9468.jpeg)


**3) Load private key画面**
変換するSSH秘密鍵を選択し、[開く]をクリック
![02_Puttygen鍵変換03.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109087/249fe379-9307-8c36-16b0-fffb19bf9ed4.jpeg)


**4) PuTTY Key Generator画面**
[Save Private Key]をクリック
![02_Puttygen鍵変換04.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109087/35379c60-0ec7-5be3-79a2-e6bc678fc091.jpeg)




**5) Save private key画面**
ファイル名を指定して[保存]をクリック
ここでは、console.ppk としてファイル名を指定
![02_Puttygen鍵変換06.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109087/b2a37730-d88c-fd40-748e-71e2be6326d9.jpeg)




**6) .PPKファイル変換完了**
![02_Puttygen鍵変換07.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109087/02449ce6-db3d-0263-d8b6-a8dc25648a25.jpeg)



## ● VNC Clientインストール
ここでは、Real VNC Viewerをインストール
https://www.realvnc.com/en/connect/download/viewer/
![03_VNC-Clientインストール.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109087/02929cdb-a12f-3b9f-5f3f-6c349b262724.jpeg)




# ■ 手順
## 1) 接続対象OCI Windows Server画面
Oracle Cloud Infrastructureコンソールのインスタンスの詳細ページで、「リソース」の下の「コンソール接続」をクリックします。
![10_コンソール接続作成.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109087/85d223c4-8885-a177-d404-5ded6c26ad1c.jpeg)


## 2) コンソール接続の作成画面
ssh公開鍵をアップロードし、[コンソール接続の作成]をクリック
![10_コンソール接続作成02のコピー.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109087/e4887251-1b46-7581-8629-be13c52a9d3d.jpeg)


## 3) コンソール接続画面
右端の「アクション」メニューをクリックし、「WindowsのVNC接続のコピー」をクリックします。
![10_コンソール接続作成04.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109087/bbb5dfd0-3c08-4fc0-3f80-a5eb9c467d66.jpeg)


## 4) コンソール接続の作成画面
ファイル・パスを秘密キー・ファイルに追加できるように、前のステップでコピーした接続文字列をテキスト・ファイルに貼り付けます。

```
Start-Job { Echo N | plink.exe -i $env:homedrive$env:homepath\oci\console.ppk -N -ssh -P 443 -l ocid1.instanceconsoleconnection.oc1.ap-tokyo-1.anxhiljrssl65iqc7ucck3o4pybtf7ltmj3qllzs5erpgltbovonwfhumrma -L 5905:ocid1.instance.oc1.ap-tokyo-1.anxhiljrssl65iqcx5kcq3biztm6kzhdsqgn5vyg7immyipy5xbrfomlcw3q:5905 instance-console.ap-tokyo-1.oci.oraclecloud.com }; sleep 5; plink.exe -i $env:homedrive$env:homepath\oci\console.ppk -N -L 5900:localhost:5900 -P 5905 localhost -l ocid1.instance.oc1.ap-tokyo-1.anxhiljrssl65iqcx5kcq3biztm6kzhdsqgn5vyg7immyipy5xbrfomlcw3q
```

## 5) メモ帳画面
テキスト・ファイルで、$env:homedrive$env:homepath\oci\console.ppkをコンピュータ上の.ppkファイルへのファイル・パスに置き換えます。このファイル・パスは文字列に2回出現します。両方の場所で置き換えます。

ここでの.PPKファイルパスは次になります。

```:.PPKファイルパス
C:\Users\opc\Downloads\ssh\console.ppk
```

```:変換後
Start-Job { Echo N | plink.exe -i C:\Users\opc\Downloads\ssh\console.ppk -N -ssh -P 443 -l ocid1.instanceconsoleconnection.oc1.ap-tokyo-1.anxhiljrssl65iqc7ucck3o4pybtf7ltmj3qllzs5erpgltbovonwfhumrma -L 5905:ocid1.instance.oc1.ap-tokyo-1.anxhiljrssl65iqcx5kcq3:5905 instance-console.ap-tokyo-1.oci.oraclecloud.com }; sleep 5; plink.exe -i C:\Users\opc\Downloads\ssh\console.ppk -N -L 5900:localhost:5900 -P 5905 localhost -l ocid1.instance.oc1.ap-tokyo-1.anxhiljrssl65iqcx5kcq3
```

## 6) PowerShell画面
接続文字列をWindows Powershellに貼り付け、[Enter]を押してセキュアな接続を設定します。

```
PS C:\Users\opc> Start-Job { Echo N | plink.exe -i  C:\Users\opc\Downloads\ssh\console.ppk -N -ssh -P 443 -l ocid1.instanceconsoleconnection.oc1.ap-tokyo-1.anxhiljrssl65iqc2nblpdc62ajc5dw4futz3kiibr5khhvknbg3i7vmu7ca -L 5905:ocid1.instance.oc1.ap-tokyo-1.anxhiljrssl65iqcx5kcq3:5905 instance-console.ap-tokyo-1.oci.oraclecloud.com }; sleep 5; plink.exe -i C:\Users\opc\Downloads\ssh\console.ppk -N -L 5900:localhost:5900 -P 5905 localhost -l ocid1.instance.oc1.ap-tokyo-1.anxhiljrssl65iqcx5kcq3

Id     Name            PSJobTypeName   State         HasMoreData     Location             Command
--     ----            -------------   -----         -----------     --------             -------
3      Job3            BackgroundJob   Running       True            localhost             Echo N | plink.exe -i...
Using username "ocid1.instance.oc1.ap-tokyo-1.anxhiljrssl65iqcx5kcq3".
Access granted. Press Return to begin session.
```


## 7) VNC Client画面
接続が確立されたら、VNCクライアントを開いて、接続先のホストとしてlocalhostを、使用するポートとして5900を指定します。
![11_VNC実行02.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109087/e59f301a-2bfd-03db-2f1a-17719ab6bbec.jpeg)



## 8) VNC接続完了
![11_VNC実行04.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109087/6183f4d1-b4e5-0bde-83d5-21f3de836aff.jpeg)






# ■ 参考
・[インスタンス・コンソール接続を使用したインスタンスのトラブルシューティング](https://docs.oracle.com/ja-jp/iaas/Content/Compute/References/serialconsole.htm)
・[WindowsでPowerShellを使用するインスタンス上のVNCサーバーへのセキュア・トンネルを設定するには](https://docs.oracle.com/ja-jp/iaas/Content/Compute/References/serialconsole.htm#Connecti)