リモートのEC2やVPSのgitリポジトリをローカル開発環境にgit clone

git clone from remote server to local

WEB上のgithubリポジトリをローカル開発環境に持ってくる git clone ではなく、VPSやEC2などのリモートサーバーのgitリポジトリを手元のローカル開発環境に持ってくるgit cloneです。gitで使うLinuxユーザーを開発使いのLinuxユーザーに固定して決めておかないとハマるので気をつけてください。尚、EC2については、踏み台サーバなどは無し、セキュリティグループでsshの22番ポートのインバウンドは開いている状態とします。念のため、cloneされる側のVPSやEC2ではgit initしていて、gitリポジトリが既にあることも事前に確認しておいてください。

ローカルからリモートホスト(Linuxサーバー)に対する接続プロトコルは、git , ssh , http/https の3種を使えますが、gitはread-onlyで開発に使いにくい、http/httpsは接続時に毎回パスワードを要求されてめんどくさい。今回は、ssh によるgit接続を使います。

ローカル開発環境の/ユーザー名/.ssh/configファイル や ssh-agent を利用します。kusanagiで説明します。

リモートホストに対してgit cloneを手元の開発マシンローカルでたたく

ローカルにはgit initしたローカルリポジトリが存在しないまま、もちろん、git remote add origin コマンドによるローカルリポジトリへのリモートリポジトリの登録も無しでclone出来ます。最初に手元の開発マシンで.ssh/configファイルにリモートサーバーへの接続アカウントを保管し、ssh-agentへ接続に必要な鍵やパスフレーズを登録します。尚、Macであれば /Users/ユーザー名/.ssh/config という感じのファイルパスが一般的だと思います。管理アカウントや鍵が増えてくると、この管理方式もカオスになりますのでconfigファイルの分割なども検討をおすすめします。

.ssh/configへの記載を行う

以下の様な感じでVPSやEC2への接続アカウントをローカル環境で/.ssh/configのファイルに記載します。TCPKeepAlive、その他も設定したい方は適宜追加してください。Hostの識別名にはプロジェクト名などを含んでおいたほうがわかりやすいと思います。ForwardAgentは、ssh agent forwardingを行うための設定です。必要がなければ削除してください。
尚、HostとHostNameのインデント段差は無くても良いようです。誰かが見やすくするためにインデントをやり始めて、世界中に伝播したと思われます。


Host conohavpskusanagi #自由に識別名をつける
  HostName     123.456.789.123 #リモートサーバーのIPアドレスやホスト名
  IdentityFile /path/to/kusanagi.pem #リモートサーバー接続鍵のローカル開発環境パス
  User         kusanagi #接続時のLinuxユーザー
  Port         22
  ForwardAgent yes

ssh-agentに鍵を登録する

ローカル開発環境のssh-agentに、VPSやEC2へ接続するLinuxユーザーの鍵とLinuxユーザー鍵パスフレーズの登録を行い、ssh接続試行中に鍵とパスフレーズを入力する手間を省きます。パスフレーズを使っていない場合、ほぼ同じ手順で鍵だけ登録します。尚、最初のevalは、バッククォートを使ってください。シングルクォートではないです。


//ssh-agent起動
eval `ssh-agent`
//鍵登録一覧の確認
ssh-add -l
//鍵登録(ターミナルを閉じると消える)
ssh-add ローカルの鍵のフルパス
//鍵登録(キーチェーンにも登録)
ssh-add -K ローカルの鍵のフルパス
//必要に応じてパスフレーズの入力を求められます
//鍵登録の確認
ssh-add -l
//登録された鍵の全削除
ssh-add -D
//鍵を指定して削除
ssh-add -d ローカルの鍵のフルパス

上記2つの.ssh/configとssh-agentの設定によって 

ssh conohavpskusanagi

による省略式なssh接続が出来る様になります。

ローカル開発環境でgit cloneをたたき、リモートリポジトリをクローンしてローカルにリポジトリを新設

ssh-agentであらかじめ登録した鍵のLinuxユーザーで、以下の様にssh経由でgit cloneをVPSやEC2に対してローカルで叩くことが出来ます。SSHのLinuxユーザー名が違っているとpermission deniedなどになり、ハマるので要注意。gitまわりのpermissin deniedは、開発モチベーションを削ぐgit嫌いの悪因になりやすいと思っています。

githubからローカルにリポジトリをクローンするコマンドは比較的に簡単です。ググった際に記事も多いです。しかし、VPSやEC2のgitリポジトリをローカルにクローンする方法はググっても記事が少なく、わからない人がひそかに多いと思っていますが、実はニーズが高い。開発環境や本番環境のお引越しでも重宝します。


git clone ssh://Linuxユーザー名@ホスト名:sshポート番号/リモートリポジトリディレクトリのフルパス/.git

kusanagiユーザーだと以下の様な感じ


git clone ssh://kusanagi@ホスト名:22/home/kusanagi/プロファイル名/DocumentRoot/.git

.ssh/configによる省略式sshコマンドでkusanagiだと以下のような感じ


git clone conohavpskusanagi:/home/kusanagi/プロファイル名/DocumentRoot/.git

その他、特に気をつけたほうが良い点としては、gitのリポジトリのディレクトリ名です。上記の場合、DocumentRootというリポジトリのディレクトリ名となります。github上では「githubアカウン名/DocumentRoot」というリポジトリになりますので、識別しにくくて管理面で難ありです。各環境とリポジトリディレクトリの名称整合性について、識別しやすいように注意する必要があります。

※WordPressの場合、コア開発者でなければ、テーマ名やプラグイン名をリポジトリ名にすることが一般的です。