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 pullAlready 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 rsaGenerating 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.netsakura@git.saku-lab.net's password:(パスワードを入力)s$ cat ~/id_rsa.pub >> ~/.ssh/authorized_keys && rm ~/id_rsa.pubs$ exit# 秘密鍵でのログインを確認するc$ ssh sakura@git.saku-lab.net -i ~/.ssh/id_rsas$ ■ |
公開鍵暗号方式については,興味があったら「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 GITREPOs$ ■ |
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$ sus% 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/configHost 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 passwordsPasswordAuthentication no # ← yes を no に変更する...:wq (保存する)# SSH のサービスを再起動するs% service sshd restart |
公開鍵を指定せずにアクセスを試みると,アクセスが拒否されます.
それでは,またお会いしましょう. とぅっとぅる~
댓글 없음:
댓글 쓰기