初めに
冒頭ですが、この記事の位置付けは、次のシリーズ記事の1つです。
シリーズ1:OCI Bastion サービス
シリーズ2:プライベート・サブネット内の OCI Compute に接続
プライベート・サブネットに配置されているOCI Computeインスタンスに接続する方法はいくつかあります。インターネットを利用する場合、パブリックサブネット内の踏み台サーバを経由するのが一般的です。
OCI Bastion サービスを利用すれば、踏み台サーバを立てず、On-Pのクライアントから、プライベート・サブネット内の Compute インスタンスに接続できます。
メリット:
✅ 踏み台サーバを立てる必要がないため、コストを節約できる。
✅ SSHトンネルで通信するので、セキュアな接続を確保できる。
✅ OCI Bastion自体は無料で利用できる。
✅ 設定方法は比較的やりやすい。
では、OCI Bastion を介してプライベートな Windows/Linux インスタンスに接続する方法を紹介したいと思います。
目次
1. 事前準備
1-1. 関連する OCI リソースの作成
タイプ | 項目 | 値 | コメント |
---|---|---|---|
VCN | CIDR | 10.0.0.0/16 | |
プライベート・サブネット | CIDR | 10.0.1.0/24 | 接続先サーバ |
サービスGW (※1) | |||
ルート表 (※1) | ルール | ターゲット: サービスGW 宛先: All <Region_Key> Services in Oracle Services Network
|
ターゲットVMのサブネットに紐づける |
セキュリティ・リスト | Egress (※1) |
0.0.0.0/0, 全てのプロトコル | 同上 |
Compute インスタンス | OS | Oracle Linux 9 | プライベート IP: 10.0.1.8 |
OS | Windows サーバ 2022 | プライベート IP: 10.0.1.138 |
※1、管理対象SSHセッションを指定する場合、作成必要。
1-2. OpenSSH のインストール
OCI Bastionサービスの本質はSSHトンネルです。クライアント側からSSHトンネルを経由して接続先サーバにアクセスするため、事前にSSHソフトのインストールが必要です。
この例ではOpenSSHを使用します。まだインストールされていない場合は、PowerShellを起動し、以下のコマンドでインストールしてください(管理者ユーザで実行)。
コマンド:Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH*'
PS C:\windows\system32> Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH*'
Name : OpenSSH.Client~~~~0.0.1.0
State : Installed
Name : OpenSSH.Server~~~~0.0.1.0
State : NotPresent
PS C:\windows\system32>
2. Bastionの作成
Identity & Security -> Bastion -> Create Bastion
Bastion名を入力し、ターゲットVCNとサブネットを選択してから、CIDRブロック許可リストを入力します。
注意
- このテストでは、CIDRブロックの許可リストを「0.0.0.0/0」に設定しています。運用時には範囲を絞り込むことが推奨されます。例えば、接続元(クライアント)のIPアドレス範囲のみを許可するのが良いでしょう。
- OCI Bastionを作成する際には、ターゲットのVCNとサブネットを指定する必要がありますが、Bastion自体に対し、配置場所を指定する必要はありません(誤解されることがよくあります)。
Bastionがアクティブの状態になると、「プライベート・エンドポイントIP」は次の画面から確認できます。このIPはターゲット・サブネット内で自動的に割り当てられます。次のステップで、このIPをセキュリティ・リストの入力ルールに追加します。「CIDRブロック許可リスト」を編集したい場合は、「編集」ボタンをクリックすれば大丈夫です。
3. セキュリティ・リストに入力ルールを追加
プライベート・サブネット内のインスタンスにアクセスするため、TCPポート(3389, 22)を入力ルールに追加するのは必要です。
設定方法は、以下のどちらでもよいです。
- プライベート・サブネットに紐づけられるセキュリティ・リストに、ルールを追加
- Computeインスタンスに紐づけられるNSGに、ルールを追加
"Source CIDR"は、Bastionの「プライベート・エンドポイントIP」です(Bastionの情報ページに表示されます)。
追加後
ポート 3389: Remote Desktop Protocol (Windows VM 接続用)
ポート 22: SSH (Linux VM 接続用)
4. Linux VMに接続する
Windows VMに接続する場合、このステップを飛ばして、次のステップを実施してください。
4-1. セッションの選択
セッション・タイプは、以下の2種類があります。
- 管理対象SSHセッション (Managed SSH session)
- ポート転送セッション (SSH port forwarding session)
セッション・タイプの差異比較
タイプ | 前提条件 | 対応OS | リソース・タイプ | 備考 |
---|---|---|---|---|
管理対象SSHセッション | 1.Bastionプラグインは有効化(Enabled)されている、かつ稼働中(Running)になっている。 2.サービスGWが作成され、ルート表に追加済。 |
Linux | VM | セッション作成時、ターゲットVMに接続できる。 |
ポート転送セッション | BastionプラグインとサービスGWは不要 | Linux/Windows | VM, Oracle Base DB, Autonomous DB, MySQL DB | SSHトンネル作成後、通常のSSH/RDPで接続 |
※、Bastionラグインの状態は、インスタンスの詳細画面(Oracle Cloud Agentタブ)から確認できます。Oracle Linuxインスタンスを作成した直後、Bastionラグインの状態は"Disabled"となっています。管理対象SSHセッションを選択する場合、Bastionセッションを作成する前、次のBastionラグインを有効化にする必要があります。
4-2. 管理対象SSHセッションで接続
Bastion -> Sessions -> Create session
項目 | 内容 |
---|---|
セッション・タイプ | "Managed SSH session"を選択 |
ユーザー名 | opc |
コンピュート・インスタンス | 対象コンパートメントの下から選択する |
SSHキー | 既存のキーファイルを利用するか、新しいキーペアを作成する。(秘密キーをクライアント側に保存してください。) |
セッションはアクティブの状態になりましたら、次のように、3ドットのメニューをクリックしてSSHコマンドをコピーします。
SSHセッションの作成
接続元のクライアントでコピーしたコマンドを実行してセッションを作成します。
コマンド
ssh -i <privateKey> -o ProxyCommand="ssh -i <privateKey> -W %h:%p -p 22 <OCID_of_Bastionsession>@host.bastion.ap-tokyo-1.oci.oraclecloud.com" -p 22 opc@<Private_IP_of_Target_VM>
-
<privateKey>
を秘密キーのパスとファイル名に置き換えます。
PowerShellでの接続例:
PS C:\users\opc> ssh -i $home\.ssh\id_rsa -o ProxyCommand="ssh -i $home\.ssh\id_rsa -W %h:%p -p 22 ocid1.bastionsession.oc1.ap-tokyo-1.amaaaaaakv6tzsaagj47utdtn5vqisr5bvin7yz3f5livaqjzi2e2k3oos6a@host.bastion.ap-tokyo-1.oci.oraclecloud.com" -p 22 opc@10.0.1.15
The authenticity of host '10.0.1.15 (<no hostip for proxy command>)' can't be established.
ECDSA key fingerprint is SHA256:<fingerprint>.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '10.0.1.15' (ECDSA) to the list of known hosts.
[opc@linux9-private ~]$
4-3. ポート転送セッションで接続
Bastion -> Sessions -> Create session
項目 | 内容 |
---|---|
セッション・タイプ | "SSH port forwarding session"を選択 |
ターゲット・ホストに接続する方法 | "IPアドレス"を選択 (デフォルト) |
IPアドレス | 接続先VMの「プライベートIP」 |
ポート | 22 |
SSHキー | 既存のキーファイルを利用するか、新しいキーペアを作成する。(秘密キーをクライアント側に保存してください。) |
セッションはアクティブの状態になりましたら、次のように、3ドットのメニューをクリックしてSSHコマンドをコピーします。
SSHトンネルの作成
接続元のクライアントでSSHコマンドを実行してトンネルを作成します。
コマンド:
ssh -i <privateKey> -N -L <localPort>:<Private_IP_of_VM>:22 -p 22 <OCID_of_Bastionsession>@host.bastion.ap-tokyo-1.oci.oraclecloud.com
-
<privateKey>
を秘密キーのパスとファイル名に置き換えます。
Windowsの例(PowerShell):$home\.ssh\id_rsa
-
<localPort>
を22に置き換えます。 -
<Private_IP_of_VM>
は自動に実のIPが埋められるので、変更する必要はありません。
PS C:\Users\Wei> ssh -i $home\.ssh\id_rsa -N -L 22:10.0.1.8:22 -p 22 <OCID_of_Bastionsession>@host.bastion.ap-tokyo-1.oci.oraclecloud.com
The authenticity of host 'host.bastion.ap-tokyo-1.oci.oraclecloud.com (192.29.38.223)' can't be established.
RSA key fingerprint is SHA256:<fingerprint>.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'host.bastion.ap-tokyo-1.oci.oraclecloud.com,192.29.38.223' (RSA) to the list of known hosts.
SSHトンネルができたら、セッションが保留されますので、リターンキーが戻りません。強制終了をしたい時、"CTRL+C"を押してください。
SSHでログイン
もう一個PowerShell画面を起動して、次のコマンドでログインします。
コマンド:ssh -i <private_key> localhost -l <username>
例:ssh -i $home\.ssh\id_rsa localhost -l opc
PS C:\Users\Wei> ssh -i $home\.ssh\id_rsa localhost -l opc
The authenticity of host 'localhost (127.0.0.1)' can't be established.
ECDSA key fingerprint is SHA256:<fingerprint>.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'localhost' (ECDSA) to the list of known hosts.
[opc@linux9 ~]$
5. Windows VMに接続する
Windows VMの場合、"Managed SSH session"は適用できないのでご注意ください。
5-1. セッションの作成
Bastion -> Sessions -> Create session
項目 | 内容 |
---|---|
セッション・タイプ | "SSH port forwarding session"を選択 |
ターゲット・ホストに接続する方法 | "IPアドレス"を選択 (デフォルト) |
IPアドレス | 接続先VMの「プライベートIP」 |
ポート | 3389 |
SSHキー | 既存のキーファイルを利用するか、新しいキーペアを作成する。(秘密キーをクライアント側に保存してください。) |
セッションはアクティブの状態になりましたら、次のように、3ドットのメニューをクリックしてSSHコマンドをコピーします。
デフォルトでは、セッションは3時間有効です。Bastionを作成する時に変更できます。
5-2. SSHトンネルの作成
接続元のクライアントでSSHコマンドを実行してトンネルを作成します。
SSHトンネルを作成するコマンド:
ssh -i <privateKey> -N -L <localPort>:<Private_IP_of_VM>:3389 -p 22 <OCID_of_Bastionsession>@host.bastion.ap-tokyo-1.oci.oraclecloud.com
-
<privateKey>
を秘密キーのパスとファイル名に置き換えます。
Windowsの例(PowerShell):$home\.ssh\id_rsa
-
<localPort>
を13389に置き換えます。(3389を区別するため) -
<Private_IP_of_VM>
は自動に実のIPが埋められるので、変更する必要はありません。
ヒント:
- バック・グラウンドで実行させたい場合:
Windows (PowerShell):Start-Job { }
でコマンドを囲む
Linux OSを使用する時、コマンドの最後に&
を追加
バック・グラウンドで実施する場合、出力メッセージを表示しませんので、ご注意ください。初回トンネル作成時、或いはトラブル・シューティングの時、フォア・グラウンド・プロセスとして実施してください。
PS C:\Users\Wei> ssh -i $home\.ssh\id_rsa -N -L 13389:10.0.1.138:3389 -p 22 <OCID_of_Bastionsession>@host.bastion.ap-tokyo-1.oci.oraclecloud.com
上記のようにフォア・グラウンドとして実施した場合、セッションが保留されますので、リターンキーが戻りません。強制終了をしたい時、"CTRL+C"を押してください。
5-3. RDPでログイン
クライアントでリモート・デスクトップを起動し、localhost:13389
を入力してから接続ボタンをクリックします。
付録
トラブル・シューティング
接続が失敗した場合、以下のような原因は一般的です。ご参考ください。
- 秘密キーの中身或いは置き場所は不正。(例:
C:\Users\<Username>\.ssh\id_rsa
) - Computeインスタンスは、まだ起動していない。
- プライベート・サブネットのセキュリティ・リストに、TCP 22か3389を公開していない。
- Bastionのプライベート・エンドポイントIPが、Ingressルールに追加されていない。
対策:セキュリティ・リストまたはNSGを確認してください。 -
サービス・ゲートウェイがない、或いはルート表に追加されていない時、セッションを作成しようとしたら、次のエラーが発生した。(管理対象SSHセッションの場合のみ)
Plugin Bastion not present for instance <OCID_of_instance>
- SSHトンネルは未作成か、作成が失敗した。
トンネル作成失敗、或いはタイムアウトの時、次のメッセージが表示される。
Connection to host.bastion.ap-tokyo-1.oci.oraclecloud.com closed by remote host.
- Bastionのセッション期限が切れた(デフォルトは3時間)。
セッション期限が切れた後、SSHトンネルを作成しようとしたら、次のエラーが発生した。
<OCID_of_Bastionsession>@host.bastion.ap-tokyo-1.oci.oraclecloud.com: Permission denied (publickey)
対策:セッションの再作成は必要。
Bastionの制限
項目 | 内容 |
---|---|
最大Bastion数 | テナンシ毎に5つ |
最大セッション数 | Bastionあたり20セッション |
セッション存続時間 | 30分~3時間 |
データ転送制限 | データ転送の制限はありません。 ただし、SSH接続あたりの接続速度は16 Mbpsに制限されます。 |
以上です。
改訂歴
2022年12月:初版作成
2023年05月:管理対象SSHセッションの接続例を追加
2023年05月:セッション・タイプの差異比較を追加
関連記事
オラクル・クラウドの個人ブログ一覧
プライベート・サブネット内のOCI Computeインスタンスに接続する方法のまとめ
ネットワーク・ロード・バランサ (NLB) の経由でプライベート・サブネット内の OCI VMに接続する
リモート・デスクトップ・ゲートウェイ経由で OCI Windows VM に接続する方法
OCI Bastion経由でプライベート・サブネット内のOracle DBに接続する
OCI Bastion経由でプライベート・サブネット内のAutonomous DBに接続
OCI Bastion経由でMySQL Cloud Serviceに接続
ドキュメント
要塞