joppot

コピペで絶対動く。説明を妥協しない

サーバ

gitのリモートプライベートリポジトリを公開鍵認証を使って環境構築する

投稿日:2014年7月13日 更新日:

Pocket

yr5ee

概要

みなさんこんにちはcandleです。

今回はgitのリモートプライベートリポジトリを作ってみたいと思います。

リモートリポジトリと言えば、Githubとかbitbucketが有名だと思います。会社やチームで開発する人々は大半がgithubを使っていますが、正直githubをプライベートリポジトリで使うメリットがよくわからないcandleです。

それぐらい自分でgitサーバたてればいいんじゃないかなと思っています。
この記事ではgithubと同じpull requestの環境を作ってみたいと思います。

下の様な環境で説明して行きたいと思います。

gitremo

前提

それぞれのPCにgitが入っている
gitの操作になれている
サーバ側にsshサーバが構築されている
どちらもsshがインストールされている。

SPONSORED LINK


クライアント側のPCに公開鍵と秘密鍵を作る

では、クライアントの設定からやってみたいと思います。
もしも、自分はいつも使っている秘密鍵と公開鍵があるよという人は新しく作る必要はありませんので飛ばしてください。

ホームディレクトリに移動して、.sshフォルダに移動します。もしも.sshフォルダが無い場合は下のコマンドで作成してから移動してください。

cd ~
mkdir .ssh
cd .ssh

.sshフォルダの中で下のコマンドを入力して公開鍵と秘密鍵を作ります。

ssh-keygen -t rsa

いくつか入力するように聞いてくるので答えていきましょう。

Generating public/private rsa key pair.
Enter file in which to save the key (/Users/candle/.ssh/id_rsa): <-エンター
Enter passphrase (empty for no passphrase): <-好きなパスワード
Enter same passphrase again: <-上と同じパスワード

初めの問いはどこに鍵を置くか聞いてきます。.sshの中でいいので、エンターを押しましょう。次にパスワードを聞いてきます。本番でも使いたい鍵にするなら複雑なものにすると良いでしょう。私は「woodgraph」というパスワードにしました。
確認の為のパスワード求められるので、同じパスワードを入力しましょう。

createsshkey

作成できたとおもいます。
確認のためlsコマンドをうちましょう。id_rsaとid_ras.pubがあるでしょうか

gettowkeies

無事作成できましたね。

今作った秘密鍵(id_rsa)はパスワードがある秘密鍵です。なにかある度にパスワードを求められるのは面倒なので、パスワード無しの秘密鍵に変換しまう。

openssl rsa -in id_rsa -out id_rsa_no_pass

//パスワード無しの秘密鍵を作成する

これをすると、鍵を作った時に入力したパスワードが求められるので、それを入力しましょう。私の場合は「woodgraph」でした。

makenopasskey

このid_rsa_no_passの権限を600にしましょう。

sudo chmod 600 ~/.ssh/id_rsa_no_pass

//権限を変更する

chmod600

既にあるid_rsaをリネームします。ファイル名の先頭にアンダーバーをつけます。

mv id_rsa _id_rsa

//名前を変更

パスワード無しの秘密鍵をid_rsaという名前に変更します。

mv id_rsa_no_pass id_rsa

//名前を変更

最終的にこういうファイル配置になります。

doublekey

クライアント側の公開鍵認証の設定は完了です。


クライアントの公開鍵をサーバに登録する

クライアント側で作ったid_rsa.pubファイルをサーバ側に送信してください。
送信の仕方はパスワード認証を使ったscpとか普通にftpでも良いし、usbでもかまいません。とにかく、クライアントにある今作成したid_rsa.pubをサーバに送ってください。

私はscpを使います。下のような感じになると思います。といってもipアドレスは人それぞれなので各自調べるなりして送ってみてください。macからubuntuに送っています。

scp ~/.ssh/id_rsa.pub candle@192.168.56.101:/home/candle/
|

transportpublickey

サーバ側のPCを開いて、送られたファイルがあるか確認してください。

checkpublickey

これを、サーバ側の.sshフォルダに移動させます。もしも、.sshフォルダが無ければ作ってください。

mkdir ~/.ssh

mv ~/id_rsa.pub ~/.ssh/
cd .ssh/
ls

movepublickey

サーバの.sshフォルダにクライアントの公開鍵が置かれただけではサーバはこの公開鍵を認識できません。sshの設定ファイル作り、そこに設定を記述します。.sshフォルダの中で設定ファイルを作ります。

touch authorized_keys

authorized_keysファイルにid_rsa.pubの内容を書き込みます。

cat id_rsa.pub >> ./authorized_keys

jfiejfa

これでクライアントからサーバに対して公開鍵を使った認証でssh接続が可能になりました。
試しにmacからサーバにssh接続します。

ssh -i ~/.ssh/id_rsa_no_pass candle@192.168.56.101

できますね。
canlogin


サーバ側にリモートリポジトリを作る

ここからgitをやっていきます。サーバ側にリモートリポジトリ用のフォルダを作ります。私の環境ではubuntuサーバにセットアップします。

cd ~
mkdir service.git

gitmkdir-1

service.gitに移動して

cd service.git

リモートリポジトリを作る時は一般に、誰もがアクセスできる様に作ってしまうのですが、
公開鍵認証が出来る人のみアクセス許可をしたいので、下のコマンドで作ります。

git --bare init

gitini

すでにSSHでマシーンにアクセスしているといことはサーバ側のIPアドレスかホスト名は把握しているかもしれませんが、確認します。

サーバ側のIPアドレスかホスト名を後々使いますので確認しましょう。

端末でifconfigとすればそのサーバのIPアドレスが分かります。

ifconfig

checkipadress

私の場合は192.168.56.101でしたね。


クライアントのgit設定

次にクライアント側のgitの設定をします。Mac環境で説明します。
私の場合はホームディレクトリに「myservice」というgitリポジトリを作ります。

cd ~
mkdir myservice
cd myservice
git init

localgitrepository

gitのユーザー名とメールアドレスを登録しておきます。

git config user.name "candle"
git config user.email candle@example.com


リモートリポジトリを登録する

次に、リモート先のリポジトリをクライアント側で設定します。
この設定をする事でローカルのgitがどこにアップロードしたら良いのか分かる様になります。
一般に下の様にセットします

git remote add origin ssh://ログイン名@IPアドレスかホスト名/リモートリポジトリのフルパス

私の場合ですと、ログイン名が「candle」でサーバ側のIPアドレスは192.168.56.101で、リモートリポジトリのパスが/home/candle/service.gitなので

git remote add origin ssh://candle@192.168.56.101/home/candle/service.git

になります。(下の画像remote addが少し間違えています。)

gitsettings

これでクライアント側のgitの設定は終わりました。

クライアントのgitでcommitする

実際にローカルで適当にファイルを作って、リモートリポジトリにプッシュしてみましょう。

ファイルを作ります。

touch index.html

適当なエディタで中身を記述します。私はいつもemacsで編集します。

emacs index.html

中身は下のをコピペして保存します。

<!doctype html>
<html lang="ja">
  <head>
    <meta charset="UTF-8"/>
    <title>Document</title>
  </head>
  <body>
  </body>
</html>

gitにアッドして

git add .

コミットします。

git commit -m "first commit"

gitmanagement

次に、このコミットをサーバ側にpushします。先ほどリモートリポジトリをセッティングしました。一応確認のため下のコマンドでリモート先を確認しましょう。

git remote -v

checkgitremote

リモートリポジトリにプッシュします。

git push origin master

無事、pushできたでしょうか?
pushrequest


まとめ

gitとsshと公開鍵認証系をうまく使ったやり方を行いました。git のremote設定もわんちゃんあるんじゃないかと試してこのやり方に落ち着きました。
あと、まだ、チームでこのやり方で開発した事がないので、本当にgithubみたいな挙動になるかわかりません。分かり次第、ここに記入します。

スポンサードリンク

「為になったなぁ」と思ったら、シェアお願いします。

-サーバ
-,

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

memcachedサーバとruby on railsのdalliを使用してセッションを管理する

概要 みなさんこんにちはcandleです。今回はmemcachedサーバを利用してrailsのセッションを管理してみたいと思います。 一般にrailsでセッション管理をしていると、ブラウザのcooki …

vagrantで取得したlet’s encryptのssl証明書をec2のnginxで使用する

概要 みなさんこんにちはcandleです。今回は取得したvagrantのubuntuで取得したlet’s encryptを実際に使用してみます。 もしも、まだ取得してない人は前回の記事を確 …

ruby on railsのbundleのGemfileでインストールしたgemを削除する

概要 みなんさんこんにちはcandleです。今回は間違って入れてしまったり、不必要になったgemの削除のやり方を紹介します。 前提 ruby on railsの環境が整っている gemの概念を理解して …

CentOSのfluentdでapacheのaccess logとerror logを取得する

概要 みなさんこんにちはcandleです。今回はapacheのアクセスログとエラーログをfluentdを使って取得して見たいと思います。 前提 一台のサーバ上にapacheサーバとfluentdサーバ …

EC2にRDSの為のmysqlコマンドのみをインストールする

概要 みなさんこんにちはcandleです。今回はちょっとしたことですが、忘れない様にまとめておきます。 EC2でRDSを使う場合 EC2の中にMysqlサーバーは必要ありません。 ただmysqlコマン …

  • English
  • 日本語

プロフィール


ベンチャー企業のCTOをやってます。大学時代にプログラミングを始め、javaから入門し、C++へて、PHPへと進み、会社ではRailsを使用。自動化が大好きなプログラマー

スポンサードリンク

アーカイブ