MFAのプロンプトを終えるとトンネルが上がり、ターミナルを閉じると接続も切れます。これは認証ではなく監督の問題で、OpenConnectにはそれを解決するスイッチがすでにあります。対話部分が本当に終わった起動後に、クライアントをバックグラウンドへ分岐させるのが正解です。以下は確認の順序です。順に進み、自分のゲートウェイに当てはまらない最初の項目で止めてください。

ログイン時にゲートウェイが求めるものを確認する

コマンドを打つ前に、配備が強制する資格情報の経路を書き留めます。証明書のみ、パスワードとトークン、SAMLプロバイダー経由のブラウザ往復はそれぞれ挙動が異なり、バックグラウンドモードはどれも飛ばせません。このオプションが変えるのは起動後の動作だけで、起動中ではありません。

誘惑される回避策はプロンプトの自動化です。パスワード要求を認識すると固定の答えを打つラッパーは、ゲートウェイがワンタイムコードを求めた瞬間に壊れ、他のアカウントが読めるファイルに資格情報を残します。人がセッションを承認すべきなら、人を工程に残してください。

最初のセッションをフォアグラウンドで実行し、出力を読む

一度は通常どおり接続し、ハンドシェイクを全部表示させます。使われるプロトコル、証明書かトークンの経路、サーバーが割り当てるトンネルアドレス、接続受理前の警告をすべて記録します。その記録が基準線であり、後でクライアント側の問題とゲートウェイ側の変更を安く見分ける唯一の手段です。ターミナルのバッファ外に保存してください。

次に同じ呼び出しへバックグラウンドモードとPIDファイルを加えて繰り返します。例はopenconnect --background --pid-file /run/openconnect.pid vpn.example.netで、ゲートウェイが必要とするプロトコルと認証のオプションは同じ行に残します。OpenConnectのマニュアルはこのオプションを起動完了後にバックグラウンドで継続するものと説明しており、だからこそ対話段階を先に終える必要があります。

実行中のプロセスを見つけやすく停止しやすくする

PIDファイルは生きたプロセスと一致している間だけ証拠になります。サービスアカウントが所有するディレクトリに置き、シグナルを送る前に記録された番号をプロセステーブルと照合します。再起動やクラッシュはファイルを残し、古いファイルのせいで停止スクリプトがトンネル稼働中に成功を報告するのが常です。確認は停止手順の一部であり、任意の手順ではありません。

検証済みのPIDにシグナルを送り、終了ステータスを信じるのではなくトンネルインターフェースが本当に消えたことを確認します。インターフェース設定に高い権限が必要なら、シグナルは送信を許されたアカウントから出す必要があります。

バックグラウンドモードをスーパーバイザーの下に重ねない

systemdなどのスーパーバイザーは自分が起動したプロセスを所有する前提なので、分岐するクライアントは混乱を招きます。監督側は起動役の終了を見ますが実際の接続は生き続けるため、再起動ロジック、状態報告、停止タイムアウトはもはや正しくないものを説明します。ユニットは対応するフォアグラウンド構成で書き、デーモン作業はスーパーバイザーに任せます。

--backgroundは人が起動して離れるセッション用に取っておきます。誰かがログインする前から存在するトンネルが必要なら、欠けているのは承認された非対話型IDとその更新計画で、コマンドラインのフラグではどちらも得られません。起動スクリプトにフラグを足すと、最初の資格情報失効で静かに失敗するトンネルになります。

セッションCookieを資格情報として扱う

OpenConnectは--authenticateによる別個の認証段階を文書化しており、得られた素材は--cookie-on-stdinで戻せます。この組は統合作業用で、生み出すものは作成したパスワードと同じくらい機密です。

値はシェル履歴、ログ、開くチケットのどれにも残さないでください。引き渡しスクリプトはCookieと一緒に受け取った検証済みのエンドポイント情報も保持する必要があります。失えば後の実行が未認証のホストへ接続しかねず、単に失敗する接続より悪い結果になります。

ターミナルを閉じる前に一覧を確認する

四つが真であるべきです。対話ログインがフォアグラウンドで終わった、PIDファイルが検証したプロセスを指す、スーパーバイザーの問題はどちらかに決着した、Cookieに平文ファイルではない保存計画がある。四つとも成り立てば、ターミナルから離れてもトンネルは動き続けます。

一つでも失敗したら、他に触れる前にその項目を直してください。残りの確認では補えません。最初の実行のフォアグラウンド記録も残します。次にトンネルが警告なしで落ちたとき、その基準線がゲートウェイ側の変更とクライアント側の変更を分けます。

関連記事