前回、Oracle Linux インスタンスへ OCI Bastion 経由で SSH 接続する手順を書きました。
今回は、前回記事で触れた基本的な構成を前提に、Ubuntu インスタンスを対象とした OCI Bastion 経由の SSH 接続手順だけをまとめます。
Oracle Linux と共通する VCN / Bastion の作成や一般的なネットワーク設定は省略し、Ubuntu 固有の注意点に絞って解説します。
前提
- ターゲット OCI インスタンスには Ubuntu のイメージを使う
- インスタンスは プライベートサブネット に配置し、パブリックIPなし で作成する
- Bastion サービスは事前に作成済みで、プライベートサブネットをターゲットにしている
Ubuntu でのインスタンス作成時のポイント
1. イメージに Ubuntu を選択する
インスタンス作成画面のイメージ選択で、Ubuntu を選びます。
OCI の無料枠対象であれば Always Free 適格 のマークを確認してください。
私は今回 Ubuntu 24.04 Minimal を選択しました。
2. ネットワーキング設定
ここは Oracle Linux のときと同じく以下のように設定します。
- プライベートサブネットを選択する
- パブリックIP の割当ては なし にする
SSH キーについても同様です。
Ubuntu での Bastion セッション作成
Bastion 自体は、Oracle Linux のときに作成済みなのでそれを使います。
ただ、セッションの作成方法が異なり、Ubuntu の場合は 管理対象 SSH セッションではなく、SSHポート転送セッションを使う のが一般的です。
Bastion セッションの設定
- OCI コンソールで「アイデンティティとセキュリティ」 > 「要塞(Bastion)」に移動する
- 作成した Bastion を選択し、「セッションの作成」をクリックする
- 以下のように設定する
| 項目 | 内容 |
|---|---|
| セッション・タイプ | SSHポート転送セッション を選択します。 |
| ターゲット・ホスト | Ubuntu インスタンスをIPアドレスまたはインスタンス名で指定します。 |
| SSH キー | ご自身のPCにある SSH 公開鍵をアップロード or ペーストするか、新規に生成します。 |

- 「セッションの作成」を実行し、状態が
アクティブになるまで待つ
鍵のパーミッション
Linux の SSH では秘密鍵の権限が緩いと接続が拒否されます。
以下のように chmod 600 で制限しておきます。
# 例
chmod 600 ~/.ssh/<Ubuntuの秘密鍵>
chmod 600 ~/.ssh/<セッションの秘密鍵>
SSH での接続方法
方法1
Bastion セッションがアクティブになったら、右側のメニューから「SSH コマンドのコピー」を使います。 以下のようなコマンドがコピーされます。
ssh -i <privateKey> -N -L <localPort>:10.0.1.203:22 -p 22 ...
| 項目 | 内容 |
|---|---|
<privateKey> | セッション作成時の秘密鍵のパスを設定します。 |
<localPort> | 基本的には 「(1024番〜65535番の間であれば)あなたのPCで現在使われていない任意のポート番号」なら何番でも自由 です。 よく使われるのは、覚えやすい 12345 や 2222、50022 などだそうです。 |
上記を踏まえたうえで、まずは以下のようにコマンドを時刻します。
# 例
ssh -i ~/.ssh/bastion_id_rsa -N -L 12345:10.0.1.143:22 -p 22 ...
すると画面が止まった(待機状態)になります。
これでトンネルが維持されている状態ですので、このターミナル画面は閉じずにそのまま放置してください。
この状態で新しく別のターミナル画面を開き、以下のコマンドを実行して Ubuntu インスタンスにログインします。
ssh -i ~/.ssh/Ubuntu作成時の秘密鍵 -p 12345 ubuntu@localhost
注記あなたのPCの 12345 番ポート(localhost:12345)に接続することが、そのままトンネルを通じて向こう側のUbuntuに繋がるため、接続先は localhost となります。
OCI の Ubuntu インスタンスのユーザー名はubuntuなので、それを指定します。
方法2
前述の方法だとターミナルを2つを使わないといけません。
これをコマンド一発でやる場合、以下のように打ちます。
ssh -i <Ubuntuの秘密鍵> -o ProxyCommand="ssh -i <セッションの秘密鍵> -W %h:%p -p 22 ... [email protected]
方法3
上記のコマンドも結局めちゃくちゃ長いので、自分のPCの ~/.ssh/config に設定を書いてしまうのが最もスマートです。
~/.ssh/config をテキストエディタで開き、以下のように追記します。
# 1. Bastion(要塞)自体の設定
Host oci-bastion
HostName host.bastion.....oci.oraclecloud.com
Port 22
# ★セッションを作成するたびに、以下のUser(ocid...の部分)だけ書き換える
User ocid1.bastionsession.oc1.....amaaaaaa...
IdentityFile ~/.ssh/セッション作成時の秘密鍵
# 2. ターゲットとなるUbuntuの設定
Host oci-ubuntu
HostName 10.0.1.143
User ubuntu
IdentityFile ~/.ssh/Ubuntu作成時の秘密鍵
ProxyCommand ssh oci-bastion -W %h:%p
設定した後は以下のコマンドだけで接続できます。
ssh oci-ubuntu
また、3時間ごとにセッションを作り直した際も、上の User の部分(ocid1.bastionsession…)だけを書き換えるだけで済みます。
VS Code の Remote SSH もこれで使えるようになります。
Ubuntu へのログイン後に確認すること
接続に成功すると、プロンプトが次のようになります。
ubuntu@<hostname>:~$