
Open OnDemand ポータルから別の EC2 へ接続してシェルアクセスをユーザーへ提供する方法を試してみた
はじめに
Open OnDemand は主に HPC クラスタ環境へブラウザからアクセスするために利用されている Web ポータルです。本記事では、Open OnDemand のポータルを導入した EC2 インスタンスから別の EC2 へ SSH 接続して、その EC2 からユーザーへ Linux の実行環境を提供するための検証をしました。結果をもとに設定方法とやってみた感想を共有します。
実現したいこと
Open OnDemand のポータルから、別の EC2 インスタンス(Ubuntu サーバー)へのシェルアクセスを提供します。
前回の記事で構築した環境をベースに新たな構成を追加します。
必要な設定
今回の設定では以下の作業が必要になります。太字は今回新たに追加する設定です。
検証環境
今回の検証環境の構成です。
項目 | 内容 |
---|---|
EC2インスタンス | t3.micro x2 |
EBS(gp3) | 8GB |
OS | Ubuntu 24.04 |
Open OnDemand | v4.0.1 |
目的 | OpenOnDemandサーバから別の EC2 を利用したシェルアクセスの提供 |
前提
セキュリティグループ
セキュリティグループの設定として、Open OnDemand サーバーからターゲットサーバーへの SSH 接続(ポート 22)を許可しておく必要があります。
EC2 間の SSH 接続
EC2 インスタンス間の SSH 接続には、公開鍵認証方式を採用しています。パスワード認証は使用しません。
設定手順
1. Open OnDemandサーバーでの設定
1-1. ユーザーの作成
まず、Open OnDemand サーバーにアクセスするためのユーザーを作成します。以下のスクリプトは以下の処理を行います。
- テストユーザー「guest00」を作成
- ランダムなパスワードを設定
- SSH キーペアを生成
#!/bin/bash
# 必要なパッケージをインストール
if ! command -v pwgen &> /dev/null; then
sudo apt-get update
sudo apt-get install -y pwgen
fi
# ユーザー名を設定
USERNAME="guest00"
# ユーザーが存在するか確認
if id "$USERNAME" &>/dev/null; then
echo "User $USERNAME already exists."
else
# ユーザーを作成
sudo adduser --disabled-password --gecos "" $USERNAME
echo "User $USERNAME created."
fi
# ランダムパスワードを生成
USER_PASSWORD=$(pwgen -s -n -c 16 1)
# パスワードを設定
echo "$USERNAME:$USER_PASSWORD" | sudo chpasswd
# パスワードをファイルに保存
echo "$USERNAME,$USER_PASSWORD" > /home/ubuntu/${USERNAME}_password.txt
sudo chown ubuntu:ubuntu /home/ubuntu/${USERNAME}_password.txt
sudo chmod 600 /home/ubuntu/${USERNAME}_password.txt
# SSH鍵の生成
sudo -u $USERNAME mkdir -p /home/$USERNAME/.ssh
sudo -u $USERNAME chmod 700 /home/$USERNAME/.ssh
# 既存の鍵があれば削除
if [ -f "/home/$USERNAME/.ssh/id_rsa" ]; then
sudo -u $USERNAME rm /home/$USERNAME/.ssh/id_rsa
fi
if [ -f "/home/$USERNAME/.ssh/id_rsa.pub" ]; then
sudo -u $USERNAME rm /home/$USERNAME/.ssh/id_rsa.pub
fi
# SSHキーペアを生成(パスフレーズなし)
sudo -u $USERNAME ssh-keygen -t rsa -b 4096 -f /home/$USERNAME/.ssh/id_rsa -N ""
# 権限の確認と修正
sudo chown -R $USERNAME:$USERNAME /home/$USERNAME/.ssh
sudo chmod 700 /home/$USERNAME/.ssh
sudo chmod 600 /home/$USERNAME/.ssh/id_rsa
sudo chmod 644 /home/$USERNAME/.ssh/id_rsa.pub
# 結果を表示
echo "User $USERNAME has been created with password: $USER_PASSWORD"
echo "Password saved to: /home/ubuntu/${USERNAME}_password.txt"
echo "SSH key generated at: /home/$USERNAME/.ssh/id_rsa"
1-2. Linux Host Adapterの設定
シェルアクセスを提供するために必要な設定を作成します。
# 必要なディレクトリを作成
sudo mkdir -p /opt/ood/linuxhost_adapter/bin
# スクリプトを作成
sudo bash -c 'cat > /opt/ood/linuxhost_adapter/bin/submit << EOF
#!/bin/bash
# スクリプトファイルを取得
script_file=\$1
shift
# スクリプトを実行
bash \${script_file} "\$@"
EOF'
# スクリプトに実行権限を付与
sudo chmod +x /opt/ood/linuxhost_adapter/bin/submit
1-3. クラスター設定ファイルの作成
OpenOnDemand にターゲットサーバーへの接続情報を登録します。
この設定ファイルでは以下の内容を定義しています。
- ターゲットサーバーの情報
- 接続方法(SSH)
- 認証方法(公開鍵認証を使用)
# クラスター設定ディレクトリの作成(既に存在する場合は不要)
sudo mkdir -p /etc/ood/config/clusters.d
# クラスター設定ファイルを作成
# ターゲットサーバーのホスト名またはIPを適切に変更してください
CLUSTER_FILE="ec2_ubuntu"
TARGET_HOST="ip-10-0-4-48.ap-northeast-1.compute.internal"
sudo bash -c "cat > /etc/ood/config/clusters.d/${CLUSTER_FILE}.yml << EOF
---
v2:
metadata:
title: \"EC2 Ubuntu Server\"
url: \"https://openondemand.ohmura.classmethod.info\"
hidden: false
login:
host: ${TARGET_HOST}
job:
adapter: \"linux_host\"
submit_host: ${TARGET_HOST}
ssh_hosts:
- host: ${TARGET_HOST}
site_timeout: 7200
debug: true
strict_host_checking: false
tmux_bin: \"/usr/bin/tmux\"
# パスワード認証を無効化し、公開鍵認証を優先
ssh_allow_password_auth: false
batch_connect:
basic:
script_wrapper: |
export PATH=\"/opt/ood/linuxhost_adapter/bin:\\\$PATH\"
%s
EOF"
2. ターゲットサーバーでの設定
2-1. 必要なパッケージのインストール
ターゲットサーバーに必要なパッケージをインストールします。
sudo apt install -y tmux
2-2. ユーザーの作成
Open OnDemand サーバーと同じユーザー名でアカウントを作成します。
USERNAME="guest00"
sudo adduser --disabled-password --gecos "" $USERNAME
2-3. SSH設定
公開鍵認証のための設定を行います。
sudo mkdir -p /home/$USERNAME/.ssh
sudo touch /home/$USERNAME/.ssh/authorized_keys
sudo chmod 700 /home/$USERNAME/.ssh
sudo chmod 600 /home/$USERNAME/.ssh/authorized_keys
sudo chown -R $USERNAME:$USERNAME /home/$USERNAME/.ssh
Open OnDemand サーバーで生成したユーザー(guest00
)の公開鍵をターゲットサーバーのauthorized_keys
ファイルに追加します。Open OnDemand サーバーの/home/guest00/.ssh/id_rsa.pub
の内容をコピーして貼り付けます。
sudo vi /home/$USERNAME/.ssh/authorized_keys
3. Open OnDemand サーバーからの接続テスト
3-1. 接続テスト
Open OnDemand サーバーからターゲットサーバーへの SSH 接続をテストします。
sudo -u guest00 ssh guest00@ip-10-0-4-48.ap-northeast-1.compute.internal
問題なく接続できれば、Open OnDemand の設定を更新します。
sudo /opt/ood/ood-portal-generator/sbin/update_ood_portal
sudo systemctl restart apache2
動作確認
Open OnDemand のダッシュボードにアクセスすると、新しく追加した EC2 Ubuntu Server が表示されます。
クリックするとシェルアクセスが可能になります。
まとめ
本記事では、Open OnDemand のポータルから別の EC2 インスタンスへ接続し、その EC2 からシェルアクセスをユーザーへ提供する設定を試してみました。
- Open OnDemand サーバーでのユーザー作成と SSH 鍵の生成
- クラスター設定ファイルの作成
- ターゲットサーバーでの対応するユーザー作成と SSH 設定
おわりに
今回の検証を通じてユーザーごとに公開鍵認証を設定する方法は、セキュアであるものの多数のユーザーがいる環境では管理が煩雑になることがわかりました。正確に言えばわかってはいたのですけど、やってみると思ったより大変でした。
今後は SSH 接続に関してはホストベース認証にするなど効率的な方法を検討します。その前に code-server を利用できるプラグインがあるようなので次回をそちらを試してます。