業務の都合上、外部の特定ユーザ向けにリポジトリを公開する必要があったりするのですが、そのときに悩ましいのがセキュリティです。大抵は ssh で接続してもらうことが多いのですが、以下の要件が求められた場合にちょっと工夫が必要です。
- リポジトリ操作のコマンド実行ができること
- ログインはできないこと
さてどうしようかということで、scponly をいじってみることにしました。
折角 ssh-agent との連携を強化しても、
専用のターミナルソフト(PuTTY や
UTF-8 TeraTerm Pro with TTSSH2、
Poderosa(旧 VaraTerm)等)は ssh-agent と連携できないどころか、
ssh 設定(~/.ssh/config)の共有すらできません。
しかし rxvt は日本語化パッチが必要ですし、 日本語ダメ/編集機能ダメな Cygwin コンソールは論外でしょう。
おまけに、 近年は telnetd が導入されていないサーバも多く、 ssh ポートフォワード + ターミナルソフトという選択肢も余命わずか、 といったところです。
sshd_config の Match 指定を使うことで、いくつかの設定を選択的に上書きすることが可能になっています。
OpenSSH 4.6 以降では PasswordAuthentication に適用することができたので、接続元ネットワークにより認証方式を切り替える動作を試してみました。
セキュアなサーバアクセスを行う上で SSH アクセスは非常に便利ですが、 パスフレーズ入力が面倒という側面があります。
この問題は ssh-agent の併用により軽減されますが、
ssh-agent 連携が環境変数ベースで実現されていることから、
複数の Cygwin コンソール(の bash)間で ssh-agent プロセスを共有するには、
(1)ssh-agent 共有のための環境変数設定をファイルに書き出し、
(2)~/.bashrc で読み込む、
といった対処が必要となります。
しかも、bash を経由せずに直接 ssh プロセスを起動するような場合、 書き出された環境変数設定を読み込む契機がありません。 また、tty を持たない状況下でそのような実行が行われた場合、 Cygwin における tty 誤認によりパスフレーズ入力待ちでブロックされてしまい、 ssh から実行が戻ってこないという事態になります。例えば:
ssh の man では:
とありますが、 OpenSSH と Cygwin の組み合わせによっては、 この仕様通りの振る舞いとならない場合があります。