Λάδι Βιώσας

http://profile.hatena.ne.jp/kenkitii/

VMWareでssh+svnでsubversionを利用するメモ

以下ではサーバーをsubversion.server、ローカルなホストをvmwareとしてあります。ちなみにVMWareにはFreeBSD6.1が入ってます。

鍵の作成とコピー

デフォルトでは、~/.sshにid_dsaとid_dsa.pubが作られます。id_dsaが秘密鍵、id_dsa.pubが公開鍵です。公開鍵をサーバーにコピーしときます。

kenkiti@vmware> ssh-keygen -t dsa
kenkiti@vmware> scp ~/.ssh/id_dsa.pub kenkiti@subversion.server:~/temp

上でコピーした公開鍵をサーバーの~/.ssh/authorized_keysに追加します。ついでにリポジトリも作っておきます。

kenkiti@subversion.server> chmod 600 ~/.ssh/authorized_keys
kenkiti@subversion.server> cat ~/temp/id_dsa.pub >> ~/.ssh/authorized_keys # 鍵の追加
kenkiti@subversion.server> rm ~/temp/id_dsa.pub
kenkiti@subversion.server> mkdir /home/svn/repos
kenkiti@subversion.server> svnadmin create /home/svn/repos                 # リポジトリ作成
kenkiti@subversion.server> svn import MyProject file:///home/svn/repos -m "initial import" # プロジェクト追加

終わったらとりあえずsshできるか試します。

kenkiti@vmware> ssh -l kenkiti subversion.server
Enter passphrase for key '/home/kenkiti/.ssh/id_dsa':(パスフレーズを入力)

sshの設定

うまく接続できたら、以下のような感じでssh/configを作っておくと後々楽です。

kenkiti@vmware> cat ~/.ssh/config
Compression yes

Host ss
Hostname subversion.server      # サーバーアドレス
User kenkiti
Port 22                         # Portを変えている場合はここで指定
ServerAliveInterval 10          # sshの接続が切れないように適当にインターバルを指定
ServerAliveCountMax 12          #

こうしておけば、ssh ssとかscp ./hoge.py ss:~/wkとかできて便利です。

ssh-agent

svn+sshする度にパスフレーズを入力するのは面倒なので、ssh-agentを使います。

kenkiti@vmware> eval `ssh-agent -c`
Agent pid 804
kenkiti@vmware> ssh-add ~/.ssh/id_dsa
Enter passphrase for /home/kenkiti/.ssh/id_dsa: (パスフレーズを入力)
Identity added: /home/kenkiti/.ssh/id_dsa (/home/kenkiti/.ssh/id_dsa)

ssh-agentが起動してる間は、パスフレーズなしでsshやscpが出来ます。終了は以下のコマンドで。

kenkiti@vmware> eval `ssh-agent -c -k`
Agent pid 804 killed

Puttyで繋いだときにkeychain経由でssh-agentが起動するようkeychainインストール&.loginを編集。

kenkiti@vmware> sudo pkg_add -r keychain
kenkiti@vmware> cat ~/.login
# start ssh-agent via keychain
keychain ~/.ssh/id_dsa
source ~/.keychain/$HOST-csh

まとめ

こうしておけば、便利にsvn+sshできます。

kenkiti@vmware> svn co svn+ssh://ss/home/svn/repos MyProject
A    MyProject/foo.py
A    MyProject/bar.py
・・・略・・・
Checked out revision 1.

ところで、SubversionにはCVSROOTのような環境変数ないんだろうか。微妙に面倒だなぁ。。。