ぬうぱんの備忘録

技術系のメモとかいろいろ

作った曲一覧はこちら

windowsから踏み台経由でgitする

この記事は

 自宅のwindowsマシンから研究室にある自分のマシン上のgitサーバーにささっとアクセスしたい。ただし、研究室のゲートウェイマシンを踏み台にしてsshでなんとかする。

環境とか

  • windows 7 professional 32 bit(ローカル)
  • Debian 6.0.7(踏み台)
  • Ubuntu 12.10(目的のサーバー)

踏み台サーバー上でncを使えること。sudoerならパッケージを入れてしまいましょう。

なにはともあれgitを入手

 ここ(http://msysgit.github.io/)から左側の通常のgit for windowsを入手。
インストールはOK連打で。

先に進む前に

そもそもsshでアクセスできることを確認する。
ローカルで"ssh fumidai.foo.bar.jp"で踏み台サーバーにログインして、その状態で"ssh mokuteki.foo.bar.jp"でログインできることを確認しておく。
fumidaiとかmokutekiとかのホスト名は適宜読み替えて下さい。

まずは踏み台の設定

まずは、ゲートウェイを踏み台にして目的のマシンに一発でssh接続出来るようにする。
"~/.ssh/config"を作成して以下の内容で埋める。
埋める時はviコマンドで。

Host fumidai
	HostName fumidai.foo.bar.jp
	User hoge
	Port 22

Host mokuteki
	Hostname mokuteki.foo.bar.jp
	User hoge
	Port 22
	ProxyCommand ssh fumidai nc %h %p

fumidaiとかmokutekiとかfooとかbarとかhogeは適当に読み替えて下さい。
この状態で

ssh mokuteki

本当は"-W"を使いたいのだが、付属するOpenSSHのバージョンが若干古くて"-W"を使えないので諦めてncに頼る。
して、2回パスワードを要求されつつもログイン出来ればとりあえずOK。
exitでローカルに戻っておく。

公開鍵の設定

ローカルに戻ってきたら今度は公開鍵の設定。
"ssh-keygen"で鍵を生成する。
ファイルの出来る場所はデフォルトで、パスフレーズは適当に。
"~/.ssh/id_rsa.pub"が公開鍵。こいつを各サーバーにコピーする。

scp ~/.ssh/id_rsa.pub fumidai:~
scp ~/.ssh/id_rsa.pub mokuteki:~

コピーしたら書くマシンのホームに公開鍵がコピーされているので、各マシン上で

touch ~/.ssh/authorized_keys
cat id_rsa.pub >> ~/.ssh/authorized_keys

今度はローカルの"~/.ssh/config"を次のように書き換える。

Host fumidai
	HostName fumidai.foo.bar.jp
	User hoge
	Port 22
	IdentityFile ~/.ssh/id_rsa

Host mokuteki
	Hostname mokuteki.foo.bar.jp
	User hoge
	Port 22
	IdentityFile ~/.ssh/id_rsa
	ProxyCommand ssh fumidai nc %h %p

IdentifyFileを追加しただけ。
この状態で"ssh mokuteki"をして2回RSA公開鍵のパスフレーズを要求されればOK。

公開鍵のパスフレーズ入力を自動化

アクセスの度に毎回毎回パスフレーズ要求されてうるさいのでエージェントで自動化する。
パスフレーズを空にすることでも対処できるが怖すぎるのでエージェントで。
"~/.bashrc"を以下のように設定

source ~/.ssh-agent-info
ssh-add -l >& /dev/null

if [ $? == 2 ] ; then
	ssh-agent > ~/.ssh-agent-info
	source ~/.ssh-agent-info
fi

if ssh-add -l >& /dev/null ; then
	echo "ssh-agent : identity is laready stored."
else
	ssh-add
fi

この状態で"source .bashrc"するとパスフレーズを要求されるはずなので入力。
入力後、目的のホストにパスワード無しでsshログイン出来ればOK。
これ以降、git bashの起動時にパスフレーズを要求される。

やっとgitにたどり着く

windowsエクスプローラで作業用のフォルタを右クリックして"Git Bash"を選択。
選択したフォルダをカレントディレクトリとしてgit bashを起動出来て便利。

git clone mokuteki:/ver/repos/fuga.git

自分のマシン上のリポジトリを格納しているディレクトリをフルパスで指定。
パスとか間違えてるとリポジトリ読めないとか合ってんのか確かめろとか怒られる。
デフォルトのルートパス指定した気がするんだけど、何故か通用しない。あれってgitユーザー限定?

とりあえずこれでOK?

たのしいgitライフ