TortoiseSVN Logo

SSHハウツー

(バージョン 0.5 (c) Marc Logemann)

多くの新しい Subversion ユーザーが SSH で Subversion を使用しようとすると問題に遭遇するため、この問題に関するハウツーを作成しました。おそらく、このハウツーを後で拡張して、Subversion または TortoiseSVN のドキュメントに提出するでしょう。

-------------------------
シナリオ
-------------------------
サーバー: Linux または Unix ライクなシステム
クライアント: Windows 2000/XP (またはバリアント)

-----------------------------------------
Subversion のインストール (サーバー)
-----------------------------------------
このトピックは Subversion の公式ドキュメントで詳細に説明されているため、ここでは詳細には触れません。しかし、それでも指摘しておきたいことが一つあります。Subversion をソースからコンパイルし、./configure に引数を何も指定しない場合、Subversion は /usr/local の下に "bin" ディレクトリを作成し、そこにバイナリを配置します。デーモンとして Subversion を実行する場合は問題ありませんが、SSH でトンネリングモードを使用する場合は、SSH 経由でログインするユーザーが svnserve プログラムやその他のバイナリを実行できることに注意する必要があります。このため、/usr/local/bin を PATH 変数に配置するか、バイナリのシンボリックリンクを /usr/sbin ディレクトリまたは PATH に通常含まれるその他のディレクトリに作成してください。

すべてが OK であることを確認するために、後でシステムにログインするターゲットユーザーで SSH でログインし、「which svnserve」と入力します。このコマンドは、svnserve が到達可能かどうかを教えてくれます。
ssh 経由で svnserve が利用可能かどうかを確認するには、「ssh svnserve」と入力します。

さらに、このドキュメントでは、すでに "svnadmin create" で Subversion リポジトリが作成されていることを前提としています。可能な問題を減らすために、リポジトリの ACL に注意してください。SSH 経由でアクセスする各ユーザーがリポジトリを操作するための適切な権限を持っていることを確認してください。

システムによっては、グローバル bashrc ファイルに 'mesg y' が記述されている場合があります。この行により、SSH がエラー「stdin: is not a tty」をスローするため、TortoisePlink での接続が失敗します。bashrc ファイルからその行を削除する必要があります。
------------------------------------------------
OpenSSH と証明書 (サーバー)
------------------------------------------------
OpenSSH のインストールについては、他の場所でより詳しく説明されているため、ここでは詳細には触れません。しかし、ほとんどのシステムでは、SSH を有効にするのは RPM をインストールするだけです。ホスティング会社からプリインストールされた Linux サーバーをレンタルする場合、SSH はすでにインストールされている可能性が非常に高いです。すべてが整っていることを確認するには、「ps xa | grep sshd」と入力し、SSH ジョブを探してください。

OpenSSH がインストールされていると仮定すると、最も重要な手順の 1 つは認証用のキーペアを作成することです。キーを作成する方法は 2 つあります。1 つ目の方法は、puttygen (PuTTY ファミリーのプログラム) でキーを作成し、公開鍵をサーバーにアップロードし、秘密鍵を PuTTY で使用する方法です。このアプローチにはいくつかの問題があるため、私は別の方法を好みます。この方法では、OpenSSH ツール ssh-keygen でキーペアを作成し、秘密鍵をクライアントにダウンロードし、秘密鍵を PuTTY スタイルの秘密鍵に変換します。

手順を追って見ていきましょう

- サーバーにログインします
- 「ssh-keygen -b 1024 -t dsa -N パスフレーズ -f mykey」と入力します
- 「パスフレーズ」をあなただけが知っている秘密のキーワードに変更します
- 「ls -l mykey*」と入力します

SSH2 DSA キー(1024 ビットキーフレーズ)を作成しました。2 つのファイルが表示されます。1 つは「mykey」という名前で、もう 1 つは「mykey.pub」という名前です。ご想像のとおり、.pub ファイルは公開鍵ファイル、もう 1 つは秘密鍵ファイルです。次に、ホームディレクトリを持つユーザーをサーバー上に作成します。

- 「useradd -m myuser」と入力します

/home の下に「myuser」という名前のディレクトリが作成されます。「myuser」に ".ssh" という新しいディレクトリを作成します。

- 「cd /home/myuser」と入力します
- 「mkdir .ssh」と入力します

次に、キーを作成したディレクトリに移動し、次のコマンドで公開鍵を .ssh ユーザーフォルダーにコピーします。

- 「cp mykey.pub /home/myuser/.ssh/authorized_keys」と入力します

または、すでにキーが配置されている場合は

- 「cat mykey.pub >> /home/myuser/.ssh/authorized_keys」と入力します

ファイル名に注意してください。本当に「authorized_keys」である必要があります。古い OpenSSH 実装では、「authorized_keys2」でした。次に、秘密鍵ファイルをクライアントコンピュータにダウンロードします。ファイルは「mykey」でした。

------------------------------------------------------------
SSH 鍵の生成と接続確認 (クライアント)
------------------------------------------------------------
Windows で SSH を実行するために必要なツールをこのサイトから入手してください。
https://www.chiark.greenend.org.uk/~sgtatham/putty/

ダウンロードセクションに移動して、「PuTTY」、「Plink」、「Pageant」、「PuTTYgen」を入手してください。

サーバーから取得した秘密鍵を使用するには、PuTTY 形式に変換する必要があります。これは、秘密鍵ファイル形式が一部の標準化団体によって指定されていないためです。これを行うには、「puttygen」を開き、「変換」メニューを開いて「鍵のインポート」を選択するだけです。次に、サーバーから取得したファイル「mykey」を参照し、キーの作成時に指定したパスフレーズを入力します。最後に「秘密鍵を保存」をクリックし、ファイルを「mykey.PPK」としてディスク上のどこかに保存します。

これで、このキーを初めて使用して接続をテストする準備が整いました。これを行うには、「PuTTY」プログラムを開き、次のように新しいセッションを作成します。

セッション->ホスト名: サーバーのホスト名または IP アドレス
セッション->プロトコル: SSH
セッション->保存セッション: MyConnection
SSH->優先 SSH プロトコルバージョン: 2
SSH->認証->認証用の秘密鍵ファイル: $PATH$\mykey.PPK ($PATH$ を mykey.PPK ファイルへの実際のパスに置き換えます)

次に、[セッション] タブに戻り、[保存] ボタンをクリックします。利用可能な接続のリストに「MyConnection」が表示されます。

次に「開く」をクリックすると、Telnet ログインプロンプトが表示されます。ユーザー名として「myuser」(二重引用符なし)を使用し、すべてが OK であれば、システムにパスワードを提供する必要はありません。システムがまだパスワードを要求する場合は、何かが間違っています。このハウツーのデバッグセクションを参照してください。

-----------------------------------------------
TortoiseSVN での SSH のテスト (クライアント)
-----------------------------------------------
TortoiseSVN をインストールしたら、Windows エクスプローラー内のフォルダーを右クリックします。TortoiseSVN->リポジトリブラウザというメニュー項目が表示されます。ブラウザを開いたら、次のような URL を入力する必要があります。

svn+ssh://myuser@MyConnection/usr/local/repos

URL について簡単に説明します (詳細が必要な場合は、Subversion ドキュメントを確認してください)。スキーマ名は「svn+ssh」です。これは、サーバーへのリクエストを Tortoise がどのように処理するかを Tortoise に指示します。ダブルスラッシュの後には、サーバーに接続しようとしているユーザーを指定できます。この場合は「myuser」です。「@」の後には、PuTTY セッション名を指定します。このセッション名には、秘密鍵の場所やサーバーの IP または DNS などのすべての詳細が含まれています。最後に、リポジトリへのフルパスを指定する必要があります。Subversion リポジトリは /usr/local/repos に存在すると想定されています。

URL を送信すると、次の画面で「repos」ノードまでの開かれたツリーが表示されます。ただし、「repos」の前の「+」ボタンをクリックすると、接続が確立され、リポジトリに何も含まれていない場合は「+」記号が消え、すでにインポートされたプロジェクトとファイルが表示されます。

これで、TortoiseSVN と連携して SSH トンネルが実行されているはずです。

-----------------------------------------------
構成のバリエーション (Pageant)
-----------------------------------------------
次に、日常業務に役立つ可能性のある構成のバリエーションをいくつか紹介します。

TortoiseSVN の URL を簡略化する 1 つの方法は、PuTTY セッション内でユーザーを設定することです。これを行うには、PuTTY で定義済みのセッション「MyConnection」をロードし、次のエントリを作成します。

接続->自動ログインユーザー名: myuser

次に、以前と同様に PuTTY セッションを保存し、Tortoise 内で次の URL を試してください。
svn+ssh://MyConnection/usr/local/repos

今回は、SSH クライアント TortoiseSVN (TortoisePlink.exe) に PuTTY セッション「MyConnection」のみを提供します。このクライアントは、ログインユーザーやサーバー IP などの必要なすべての詳細についてセッションを確認できます。

Pageant を使用してすべてのキーを保存することを好む人もおり、実際、すべてのハウツーでは、そこにキーを配置することが重要であると説明されています。実際、PuTTY セッションはキーを保存できるため、通常の業務では Pageant は必要ありません。ただし、複数のユーザーのキーを保存したいと想像してください。その場合、接続しようとしているユーザーに応じて、PuTTY セッションを何度も編集する必要があります。このような状況では、Pageant は完全に理にかなっています。PuTTY、Plink、TortoisePlink、またはその他の PuTTY ベースのツールが SSH サーバーに接続しようとすると、Pageant が保持しているすべての秘密鍵をチェックして接続を開始するためです。

このタスクでは、Pageant を起動してキーを追加するだけです。上記の PuTTY セッションで定義したのと同じ秘密鍵である必要があります。Pageant を秘密鍵ストレージに使用する場合は、PuTTY セッション内の「SSH->認証->認証用の秘密鍵ファイル」セクションを削除できます。他のシステムや他のユーザーのために、さらにキーを追加することもできます。クライアントの再起動ごとにこの手順を繰り返したくない場合は、Pageant を Windows インストールの自動起動グループに配置する必要があります。完全なパスを持つキーをコマンドライン引数として pageant.exe に追加できます。

SSH サーバーに接続する最後の方法は、TortoiseSVN 内でこの URL を使用することです。

svn+ssh://[email protected]/usr/local/repos

ご覧のとおり、保存された PuTTY セッションではなく、IP アドレスを接続先として使用しています。ユーザーも指定していますが、秘密鍵ファイルがどのように見つかるか疑問に思うかもしれません。TortoisePlink.exe (TortoiseSVN の標準 SSH クライアント) は PuTTY スイートの Plink ツールの修正バージョンであるため、TortoiseSVN も実行中の Pageant を探し、Pageant に保存されているすべてのキーを試行します。

----------------------------------------
フィードバック
-------------------
このハウツーに関するコメントや修正については、TortoiseSVN メーリングリストをご利用ください。

これは、http://www.logemann.org/day/archives/000099.html (ページ削除済み) にあったオリジナルのコピーです。
Marc に感謝します!