デプロイ

デプロイ

SSH-Frontièreのデプロイは4つのステップで行います:バイナリのインストール、SSH鍵の設定、ログインシェルの変更、sudoersでのセキュリティ設定。

1. バイナリのインストール

# バイナリをサーバーにコピー
scp target/x86_64-unknown-linux-musl/release/ssh-frontiere root@server:/usr/local/bin/

# サーバー上で
chmod 755 /usr/local/bin/ssh-frontiere

2. 設定のインストール

# ディレクトリの作成
mkdir -p /etc/ssh-frontiere

# 設定のコピー
cp config.toml /etc/ssh-frontiere/config.toml

# パーミッションの保護(サービスアカウントが設定を読めるようにする)
chown root:forge-runner /etc/ssh-frontiere/config.toml
chmod 640 /etc/ssh-frontiere/config.toml

# ログディレクトリの作成
mkdir -p /var/log/ssh-frontiere
chown forge-runner:forge-runner /var/log/ssh-frontiere
chmod 755 /var/log/ssh-frontiere

3. サービスアカウントの作成

# ssh-frontièreをログインシェルとしてユーザーを作成
useradd -m -s /usr/local/bin/ssh-frontiere forge-runner

または、アカウントが既に存在する場合:

# ログインシェルの変更
chsh -s /usr/local/bin/ssh-frontiere forge-runner

注意:別のセッションからSSH接続が動作することを確認するまで、現在のセッションを閉じないでください。

4. SSH鍵の設定(第1層)

~forge-runner/.ssh/authorized_keysを編集:

# CIランナー鍵(opsレベル)
command="/usr/local/bin/ssh-frontiere --level=ops",restrict ssh-ed25519 AAAA... runner-ci

# モニタリング鍵(読み取り専用レベル)
command="/usr/local/bin/ssh-frontiere --level=read",restrict ssh-ed25519 AAAA... monitoring

# 管理者鍵(adminレベル)
command="/usr/local/bin/ssh-frontiere --level=admin",restrict ssh-ed25519 AAAA... admin-deploy

command=オプションは、クライアントが送信したコマンドに関係なく、選択した--levelssh-frontiereの実行を強制します。restrictオプションはポートフォワーディング、エージェントフォワーディング、PTY、X11を無効にします。

# パーミッションの保護
chmod 700 ~forge-runner/.ssh
chmod 600 ~forge-runner/.ssh/authorized_keys
chown -R forge-runner:forge-runner ~forge-runner/.ssh

5. sudoersの設定(第3層)

/etc/sudoers.d/ssh-frontiereを作成:

# SSH-Frontière:サービスアカウントの許可コマンド
forge-runner ALL=(root) NOPASSWD: /usr/local/bin/backup-config.sh *
forge-runner ALL=(root) NOPASSWD: /usr/local/bin/deploy.sh *
forge-runner ALL=(root) NOPASSWD: /usr/local/bin/healthcheck.sh

ワイルドカード*は引数を受け取るスクリプト(例:backup-config.sh forgejo)に必要です。引数のないスクリプト(healthcheck.shなど)には不要です。

構文の検証:

visudo -c -f /etc/sudoers.d/ssh-frontiere

6. 確認

# 別のターミナルからテスト(現在のセッションを閉じないでください)

# 利用可能なコマンドが表示されることを確認
{ echo "help"; echo "."; } | ssh forge-runner@server

# コマンドのテスト
{ echo "infra healthcheck"; echo "."; } | ssh forge-runner@server

多層防御

3つの層が互いに補完します:

メカニズム防御内容
1authorized_keyscommand= + restrictレベルを強制、フォワーディング/PTYをブロック
2SSH-Frontière(ログインシェル)TOMLホワイトリストに対して検証
3sudoersのsudoシステムコマンドを制限

攻撃者がSSH鍵を侵害しても、ホワイトリストで許可されたコマンドしか実行できません。第2層を迂回しても、権限はsudoersで制限されます。

ロールバック

何か問題がある場合は、通常のシェルに戻します:

# コンソール(IPMI/KVM)または別の管理者アカウント経由
chsh -s /bin/bash forge-runner

ヒント:ログインシェルを変更する前に/etc/passwdをバックアップしてください。

cp /etc/passwd /etc/passwd.bak.$(date +%Y%m%d)

次へはじめての使い方 — SSH-Frontière経由での最初のSSHコマンド。