GitHubを利用している際に、HTTPSでリポジトリをcloneしているとpushやpullをする際に毎回IDとパスワードの入力を求められます。一時的にメモリ上などにキャッシュすることも出来るのですが、一定期間が経過すると再び入力する必要があるため根本的な解決になりません。
$ git push Username for 'https://github.com': katsube Password for 'https://katsube@github.com':
そこで今回はGitHubにSSHで利用する公開鍵を登録し、アカウント情報を毎回入力せずに済む設定を行います。
秘密鍵と公開鍵を作成する
まずはローカルで秘密鍵と公開鍵を作成します。
これは至って簡単でssh-keygen
コマンドを実行するだけです。-t
は暗号化方式、-b
はビット長です。デフォルトは2048bitですが長めに設定した方が安全です。-C
はコメントなので任意の文字列を指定します(未指定も可)。鍵は端末やユーザー毎に作成することが多いのでどこで作成した鍵か分かる物にして置くと便利です。
$ ssh-keygen -t rsa -b 4096 -C 'katsube@CentOS'
ssh-keygen
コマンドを実行するとァイルの場所、鍵にパスワードをかけるか質問されますのでそれぞれ答えます。パスワードは今回はかけません。エンターキーを押すと指定したパスにファイルが作成されます。
Enter file in which to save the key (/home/neec/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again:
デフォルトだとホームディレクトリの.ssh
ディレクトリ内に生成されますので、ls
コマンドなどで確認します。id_rsa
が秘密鍵、id_rsa.pub
が公開鍵です。GitHubには公開鍵の方を登録します。秘密鍵は他の人に見せないよう気をつけてください。ネットワークを介して送信することも避けたほうが安全です。また.ssh
ディレクトリ自身と、秘密鍵のパーミションはオーナーだけが読み書きできるようになっていることも重要です。
$ ls -la .ssh/ drwx------ 2 neec neec 57 7月 2 18:50 . drwx------. 23 neec neec 4096 7月 2 18:33 .. -rw------- 1 neec neec 3243 7月 2 18:50 id_rsa -rw-r--r-- 1 neec neec 740 7月 2 18:50 id_rsa.pub -rw-r--r-- 1 neec neec 405 6月 8 00:07 known_hosts
公開鍵を表示し、クリップボードにコピーしておきます。
$ cat .ssh/id_rsa.pub ssh-rsa AAAAB3NzaC(中略)vAgP05Qw== katsube@CentOS
公開鍵をGitHubへ登録する
GitHubにログインし、右上のメニューなどから「Settings」をクリック。
左側のメニューから「SSH and GPG keys」をクリック。
右上にある「New SSH Key」をクリック。
Titleは適当な文字列を入力、Keyに先ほど生成した公開鍵を入力(ペースト)。下にある「Add SSH key」をクリック。改行やスペースなどの余計な文字が入っていたり、公開鍵の冒頭のssh-rsaやコメント部分を省略すると登録できなかったり認証時に失敗します。
先ほどの画面に戻ってきますので、自分が登録したキーが表示されていれば完了です。
確認する
GitHubからclone
GitHubから自分がオーナーのリポジトリをcloneしてきます。このとき必ずHTTPSではなくSSHを利用してください。
新規にリポジトリを作成した場合は、画面の上部でSSHとHTTPが切り替えられます。
今回は新規にリポジトリを作成したのでこれをgit clone
で取ってきます。
$ git clone git@github.com:katsube/hello1.git Cloning into 'hello1'... Warning: Permanently added the RSA host key for IP address '52.192.72.89' to the list of known hosts. warning: You appear to have cloned an empty repository.
git add/commit
cloneした際に作成されたディレクトリへ移動し、適当なファイルを作ってcommitします。
$ cd hello1/ $ echo "SSH key test" > test.txt $ git add test.txt $ git commit -m '1st commit' [master (root-commit) 315eb17] 1st commit 1 file changed, 1 insertion(+) create mode 100644 test.txt
git push
先ほどのcommitした情報をgit push
でGitHubへ送信します。
$ git push Counting objects: 3, done. Writing objects: 100% (3/3), 226 bytes | 226.00 KiB/s, done. Total 3 (delta 0), reused 0 (delta 0) To github.com:katsube/hello1.git * [new branch] master -> master
はい、IDやパスワードの入力を求められませんでしたね。