Linux全般こんにちは。今回のテーマは『Linuxサーバー上にGitリモートリポジトリを作成する』です。プロ、アマを問わずコードを書く作業をされている方はSubversionやGit等のバージョン管理システムを活用していると思います。最近はGitHub等の便利なサービスが普及して自分でリモートリポジトリを用意する必要性も薄れてきた気がします。今回は小規模での開発に活用できるリモートリポジトリをUbuntuをサーバーとして作成してみました。作業環境および構築しようとした設定は以下の通りです。16.04LTS(sshサーバーは設定済み)サーバー側のGitリポジトリの場所:/opt/gitサーバー側のGit専用ユーザーアカウント:gitクライアント:ssh接続が可能なLinuxマシンssh接続用のGitリポジトリを準備するサーバー側でgit専用のユーザーアカウントを作成するまずはサーバー側にGitリポジトリ用のユーザーアカウントを用意します。今回はgitユーザーとしました。gitUbuntuの場合はユーザー作成時にパスワードを決定と思いますが、念の為以下のコマンドでパスワードを付与しておきます。gitそしてクライアントからアクセスされるベースとなるディレクトリを作成します。今回は/opt/gitとしました。gitユーザーで読み書き可能な権限がある場所であればどこでも良いと思います。以下の要領で作成していきます。/opt/gitこれでサーバー上の/opt/git以下がgitユーザーで書き込み可能となりました。Gitリポジトリを作成するではサーバー上の/opt/git以下にGitリポジトリを作成していきます。initベアリポジトリには慣例的にディレクトリ末尾に.gitを付けることになっているそうです。技術的には.gitと命名しなくてもリポジトリとしては機能します。他のリポジトリをcloneしてきて/opt/git以下にクローンする場合は以下のようにします。gitユーザーパスワードによる認証とても簡単なアクセスの承認方法としてサーバー側のgitユーザーパスワードを共有するという手法があると思います。簡単な反面、パスワード管理には忘却や使い回しによる流出等のデメリットも認識する必要があります。作成したサーバー上のGitリポジトリをCloneしてみましょう。testprojectこの際にサーバーのgitユーザーのパスワードを聞かれますので入力してcloneします。gitユーザーのパスワードで認証する場合はpushする際にもパスワードを求められます。公開鍵による認証gitユーザーのパスワードによるアクセス認証はお手軽ですが、パスワードを知られたくないメンバーがいる場合や複数人でパスワードを管理することに危険性を感じる場合には不向きです。そのような場合には公開鍵による認証を用いることでgitユーザーのパスワードを知らずともリポジトリにアクセス出来るようになります。公開鍵の作成と登録クライアント側で以下の用にssh公開鍵を作成します。Linuxでの作業を元に記事を書いていますが、他のLinuxまたはMacでも大差ないと思います。rsa(操作)公開鍵のファイル名を入力(デフォルトではid_rsa)(操作)パスワードの設定(設定しない場合はエンターを押せば良い)(操作)パスワードの確認(設定しない場合はエンターを押せば良い)以上の操作で~/.ssh以下に秘密鍵と公開鍵が出来上がっています。公開鍵は.pub拡張子がある方です。今回id_rsaとid_rsa.pubを作成しました。クライアント再度のsshは接続の際にデフォルトで~/.ssh/rsa_idや~/.ssh/identity(/etc/ssh/ssh_configによる)を読みにいきますので、それ以外の名前でファイルを作成した場合には読み込むキーの指定が必要となります。以下の設定はid_rsa以外の名称をつけた場合に設定して下さい。~/.ssh/config以下のように編集します。~/.ssh/<秘密鍵ファイル名>サーバー側でのssh公開鍵の登録クライアント側で作成したid_rsa.pubをサーバー側にメール等で送付します。sambaやftp等の手段でも構いません。サーバー側では受信した公開鍵ファイルを登録していきます。~/.ssh/authorized_keysクライアント側とサーバー側双方の公開鍵に関する設定が終わりました。これでサーバー上のgitユーザーにパスワードなしでssh接続が可能となります。サーバー上のリポジトリを使用するでは準備が整いましたので準備したtestprojectをクローンしてみましょう。commit"これで空のREADME.mdファイルを作成してコミットしました。pushしてサーバーへ変更を反映させることでサーバー上のリポジトリが基本的な機能を有していることを確認しましょう。master無事pushできればOKです。ログインシェルを変更するこれまでの設定では認証方式がパスワードか公開鍵かに関わらず、bashでログインできてしまうため、ssh経由でgitアカウントにログインしたユーザーは付与された権限内でファイルの閲覧や読み書きができてしまいます。万一に備えてGitに関する操作以外のことができないようにログインシェルを変えておくこともできます。サーバー側で以下の作業をします。git-shellの場所を調べます。git-shell筆者環境では/usr/bin/git-shellでした。gitユーザーの/bin/bash部分を編集git:x:1002:1002:,,,:/home/git:/usr/bin/git-shellこの設定によりgitユーザーでログインした際にはgit-shellがログインシェルとなり、Gitリポジトリへのプッシュやクローン等の作業しかできなくなりました。最後にこれまでGitHubをはじめ誰かが予め作成したリポジトリを使用する機会ばかりだったためにリモートリポジトリを作成して複数の人と作業する環境を構築しようと思い作業してみました。本当はGitLabの導入までやりたかったのですが、それはいずれ機会を見つけて記事にしたいと思います。コメントをキャンセルメールアドレスが公開されることはありません。10をインストールするタイル型ウィンドウマネージャXmonadを使う(カスタム編)→もっと見るクロのプロフィール映画と読書愛するプログラマー。Androidな人だったけど気がついたらサーバーサイドへ。Dataを主宰しています。