しまてく

学んだ技術を書きためるブログ

コマンドラインからのsvn+ssh

目的

今までWindows x TortoiseSVNGUI環境でSVNを使ってきました。


でもやっぱり時代はCUIだろ、JK
ということでWindows x コマンドライン x sshという環境を試行錯誤しながら
構築していきたいと思います。

環境

サーバ:さくらレンタルサーバ(FreeBSD)
クライアント:WindowsXP

SVNに入る前に、SSHクライアントからサーバに接続

ふだんサーバに接続するのにはPoderosaというソフトを使ってます。
でも毎回パスフレーズを聞かれて鬱陶しい限りでした><


まずこいつから黙らせましょう。

はじめに鍵生成
  1. Poderosa.exeを起動し、[ツール]-[SSH鍵生成ウィザード]を実行。
  2. 何も設定せずそのまま[次へ]
  3. パスフレーズを空にして鍵を生成しますか?』//うん。
  4. ウィンドウのなかでマウスぐりぐり
  5. [秘密鍵を名前をつけて保存]//これはwindows側で保持する鍵です。大切にね!
  6. [OpenSSH形式で公開鍵を名前をつけて保存]//これはサーバに転送してサーバ側の設定に使います。
作った鍵をサーバで設定する
  1. Poderosaでパスワードを使ってサーバにログインする。
  2. % cd ~/
  3. % mkdir .ssh
  4. この[.sshフォルダ]にOpenSSH形式で作った公開鍵をFTPでもなんでもいいのでサーバに送る。
  5. % cd .ssh
  6. % vim authorized_keys //この名前のファイルを作る
  7. % cat 公開鍵の名前 >> authorized_keys
  8. % cd ../
  9. % chown -R ユーザ名 .ssh
  10. % chmod 700 .ssh
  11. % chmod 600 .ssh/authorized_keys
鍵認証でログインする
  1. Poderosaで[ファイル]-[新規Telnet/SSH接続]を開く。
  2. ホスト:サーバのアドレス
  3. プロトコル:SSH2
  4. アカウント:ユーザ名
  5. 認証方法:公開鍵
  6. 鍵ファイル:さっき作った秘密鍵

これでOK。


超スムーズログイン!!

本命のSVNの設定

その前に環境の設定
  • Subversionはインストールされていることが前提。
    • インストールしてない場合はここからDLして解凍。
    • 適当な場所に置いたら環境変数のPATHにフォルダの中のbinまでのパスを追加する。
  • Putty ごった煮もインストールする。
    • インストールしてない場合はここからDLして解凍。
    • 適当な場所に置いたら上と同様にPATHを通す。*1
Poderosaで作った秘密鍵Puttyで使えるようにコンバートする
  1. puttygen.exeを実行し、[既存の秘密鍵の読込]をする。
  2. 読み込んだら[秘密鍵の保存]をする。
  3. Putty用の鍵完成
試しにPuttyでログインしてみる
  1. putty.exeを起動
  2. [セッション]で[ホスト名]にサーバのアドレスを入れる。
  3. [接続]-[データ]で[自動ログインのユーザ名]に自分のユーザ名を入れる。
  4. [接続]-[SSH]-[認証]で[認証のためのプライベートキーファイル]にコンバートした秘密鍵を指定する。
  5. [セッション]に戻って[セッション一覧]に適当な名前を入れて保存する。
  6. [開く]ボタンで接続。
  7. さくっとログインウマー!
この勢いでSVNも設定
  1. [C:\Documents and Settings\ユーザー名\Application Data\Subversion]を開く。
  2. [config]をエディタで開く。
  3. [tunnels]というセクションに『ssh = plinkw.exe -l ユーザ名 -i "C:\\Path\\To\\xxx.ppk"*2』と書く。
  4. コマンドプロンプトを開き以下のコマンドを入れてみる。
  5. svn list svn+ssh://サーバーのアドレス/リポジトリのパス/
  6. コマンドラインからsvn+sshが使える!!

まとめ

コマンドラインからsvn+sshが使えると何がうれしいかと言うと、バッチで自動化!とか
あんなことやこんなことに使えそうですね。
まぁ僕はコマンドラインを使ってるのが楽しいだけなんですけどねw


今回個人的にはまったポイントはさくらのサーバーでchownってしないといけない事。
全然気づかなかった><


ということで、試行錯誤しながらあっちこっちを弄っているので、「それもっと簡単にできるよ!」
とか「違うよ!全然違うよ!」という意見があればどうぞ教えてください><

追記(7/31)

今日会社で試したら
「command not found」と怒られてしまいました><


以下の文字列をauthorized_keysに追加したらいけました。なんで家でできたのか謎。

ssh-dss (以下略

  ↓ssh-dssの前に一行で追加する。

command="$HOME/local/bin/svnserve -t --tunnel-user=ユーザ名 -r $HOME/var/svn/repo*3",
no-port-forwarding,no-agent-forwarding,no-X11-forwarding,no-pty ssh-dss (以下略

*1:ちなみにシステム環境変数設定したら再起動しないと反映しないよ。

*2:このファイルはコンバートした秘密鍵

*3:リポジトリのパス