http://blog.saku-lab.net/2012/07/ssh-git.html
備忘録とか言いながら何にも書いてなかったので,ちょくちょく書いていきたいね.
パスワード入力なしで GIT にアクセスする
Gitを使って開発してると,push や pull の度にパスワード入力するのめんどいよね.そこで,公開鍵認証を使ってパスワード入力なし,かつ安全にリポジトリにアクセスする方法.
今まで
今までは HTTP を使って,
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| # リポジトリをクローン $ git clone https: //git .saku-lab.net /git/homura .git # 編集作業とコミット $ vim madoka.html ... $ git add . $ git commit -am " てきとーに編集しちゃったよ ウフフ☆おっけー♪ " # 競合を確認し,変更をプッシュ $ git pull Already up-to- date . $ git push (ユーザ名とパスワードを入力) |
前提条件
- SSHでGITサーバにログインできる
- GITサーバは Linux とする
- テスト環境は CentOS ですが,他のディストリビューションでも変わりません
- GITサーバで管理者権限にスイッチできる
- SSHの鍵ペアを生成できる環境
- Windows : cygwin など
- Mac, Linux : デフォルトでインストール済み
- コマンドラインでは,以下の内容を自身の環境で適度に置き換える
- GITサーバのホスト名は「 git.saku-lab.net 」とする
- GITサーバへアクセスするユーザ名は「 sakura 」とする
- プロンプトは以下を意味する
- c$ : クライアントでの操作
- s$ : サーバでの操作
- [cs]$ は一般ユーザを示す
- [cs]% は特権ユーザを示す
やりかた
鍵ペアの作成・サーバへの登録
まずは,サーバにログインする為の鍵ペアを生成する.そして,生成された公開鍵をサーバに登録する事で,パスワード認証なしでサーバにログインできるようにする.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
| # SSHの鍵ペアを生成する c$ ssh -keygen -t rsa Generating public /private rsa key pair. Enter file in which to save the key ( /home/sakura/ . ssh /id_rsa ): [Enter] Enter passphrase (empty for no passphrase): [Enter] Enter same passphrase again: [Enter] Your identification has been saved in /home/sakura/ . ssh /id_rsa . Your public key has been saved in /home/sakura/ . ssh /id_rsa .pub. ... # サーバに公開鍵鍵を転送し,登録する c$ scp ~/. ssh /id_rsa .pub sakura@git.saku-lab.net: /home/sakura (パスワードを入力) c$ ssh sakura@git.saku-lab.net sakura@git.saku-lab.net's password: (パスワードを入力) s$ cat ~ /id_rsa .pub >> ~/. ssh /authorized_keys && rm ~ /id_rsa .pub s$ exit # 秘密鍵でのログインを確認する c$ ssh sakura@git.saku-lab.net -i ~/. ssh /id_rsa s$ ■ |
公開鍵暗号方式については,興味があったら「PKI」や「RSA」ってキーワードでてきとーにググるとよくわかると思います.
SSHコンフィグの編集
SSHコンフィグを編集し,接続先や秘密鍵を予め設定しておく.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| # SSHコンフィグの編集 c$ vim ~/. ssh /config (なければ,新規作成) Host GITREPO HostName git.saku-lab.net IdentityFile ~/. ssh /id_rsa User sakura (上記を自分の環境に置き換えて編集して保存) # SSHコンフィグの反映を確認 c$ ssh GITREPO s$ ■ |
SSHでGITリポジトリにアクセス!
では,Gitリポジトリへのアクセスに SSH を使用してみます.
1
2
3
4
5
6
7
| # コマンド構文 c$ git clone ssh : // [Host名]/[リポジトリまでの絶対パス]/[リポジトリ名].git # SSHでクローンする c$ git clone ssh : //GITREPO/var/gitrepo/homura .git ※ サーバの [ /var/gitrepo ] にリポジトリが存在している場合 |
クローンした際にリポジトリの [.git/config] に接続先 (origin) などが記録される為 クローン以降の pull, push は自動的に秘密鍵を使ってアクセスしてくれるわけです.
すでにSSHでアクセスできる環境がある場合は,すごく簡単ですね.これで色々と捗ります.
パーミッションについて
一つ注意として,上記の方法でアクセスした場合,当然アクセスするユーザは秘密鍵で認証されたユーザとなります.つまり,Gitリポジトリにそのユーザの読み取り権限がなければ git clone, pull が,書き込み権限がなければ git push が出来ません.
一番楽なのは,Gitリポジトリのパーミッションをフルアクセスにしてしまう事ですが,セキュリティ上好ましくはありません.
なので,アクセスさせたいユーザをGitの管理ユーザと同じグループに所属させ,グループへのパーミッションを変更するとアクセス出来るようになります.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| # 特権ユーザとなり,ユーザをグループに追加 s$ su s% vigr ( vi が立ち上がる) root:x:0: ... git-user:x:33:gitman,sakura # ← ユーザ追加(複数の場合はカンマで区切る) ... ※ Gitリポジトリのグループが [git-user] の場合 # パーミッションを変更 s% chmod -R 770 /var/gitrepo |
なお,グループの定義ファイルは [/etc/group] なので,それを直接編集しても大丈夫です.
しかし,そうすると定義ファイルの再読み込みが必要になるので,[vigr]コマンドを使った方が楽だと思います.
([vigr]コマンドは終了時に[/etc/group]を再読み込みしてくれる)
ファイアウォール
上記の方法で [ssh://] として,SSHプロトコルを使用した場合は標準でtcp/22 が使用されます.なので,普通に tcp/22 のポートを開ければアクセスが可能です.
ちなみに,GITプロトコルはデフォルトでtcp/9418, HTTPはtcp/80,HTTPSは tcp/443を使用します.
また,セキュリティ上の理由で SSH のポートを変更している場合は,SSHコンフィグにポート番号を指定する事でアクセスが可能です.
1
2
3
4
5
6
7
8
9
10
| # SSHコンフィグの編集 c$ vim ~/. ssh /config Host GITREPO HostName git.saku-lab.net Port 12345 # ← ポート番号を指定 IdentityFile ~/. ssh /id_rsa User sakura (上記を自分の環境に置き換えて編集して保存) |
ローカル環境だけなら良いですが,外にSSHを開いていると1日大体5回くらいは知らないところから接続要求が来ます.
(デフォルトポートなら尚更です.)
もし,これでパスワードログインが破られれば,不正にサーバにログインされます.
1
2
3
4
5
6
7
8
9
10
11
| # SSHの設定を編集 s% vim /etc/ssh/sshd_config ... # Change to no to disable tunnelled clear text passwords PasswordAuthentication no # ← yes を no に変更する ... :wq (保存する) # SSH のサービスを再起動する s% service sshd restart |
公開鍵を指定せずにアクセスを試みると,アクセスが拒否されます.
それでは,またお会いしましょう. とぅっとぅる~
댓글 없음:
댓글 쓰기