Gitの初期設定とssh接続の設定
gitの初期設定~githubへのssh接続するまでの手順のメモです。
Gitのユーザー名を設定
必須みたいです。
git config --global user.name "ユーザー名"
Gitのメールアドレス設定
こっちも必須みたいです。
git config --global user.email "hoge@example.com"
※設定値をあとでやっぱりかえたい場合は、上記の同じコマンドで名前など設定値の部分だけ変えて実行すると上書きできる。
.sshディレクトリ作成とpermissionの設定と設定ファイルの作成
chmod700で管理者だけが読み書き実行でき、それ以外のユーザーは読みも、書きも、実行もできない。
chmod600は管理者が読み書きのみ可。それ以外のユーザーは読み書きできない。もちろん実行もできない。
mkdir ~/.ssh
touch ~/.ssh/config
chmod 700 ~/.ssh
chmod 600 ~/.ssh/*
上記のように、ファイルは600の権限、ディレクトリは700の権限に設定。
Gitの設定内容を確認する方法
git config -l
-l(list)オプションでgitの設定内容が表示される。
カレントリポジトリの内容が表示される。
globalの設定内容を確認
git config --global -l
fatal: unable to read config file 'C:/Users/USER/.gitconfig': No such file or directory
初期の初期な段階だから出る?設定完了後にまた確認してみます。
git config --local -l
fatal: --local can only be used inside a git repository
これも初期の初期だから出る?と思います。また後で確認です。
git config --system -l
システム設定が表示される。これはちゃんと表示されました。
初期設定について、参考にさせて頂いた記事はこちら。
windowsにGit bashをインストールする方法はこちら。
ssh configを作成
sshとは:
わかりやすい記事が少なくて分かりにくい中、こちらの記事はめちゃくちゃ分かりやすいです。
https://wa3.i-3-i.info/word11722.html
物理的に遠隔な場所にあるサーバーにログインしたりするときに通信が必要だけど、その通信内容を暗号化できるのがsshという仕組み。
僕はMacbook Proでvagrant仮想マシンを使っていた時に、vagrant sshでログインしていたのだけど、sshってそういう意味なんだって今更やっていたことが分かった気がします。
ssh_configファイルという表現を目にするけど、.ssh/configファイルとssh_configファイルは同じで、表現が違うだけ。
ssh_configファイルとは、ssh経由で接続するためのssh接続クライアントが参照する設定ファイル。sshクライアントがこのファイルを参照し、書かれた設定内容を適用してくれる。
ssh_configファイルを作成して設定内容を書く。
vim ~/.ssh/config
設定内容
Host *
StrictHostKeyChecking no
UserKnownHostsFile=/dev/null
ServerAliveInterval 15
ServerAliveCountMax 30
AddKeysToAgent yes
UseKeychain yes
IdentitiesOnly yes
設定内容の詳細
Host * で、すべてのssh接続先を対象に設定を適用。
Hostとは接続先のこと。自分側から見た外部の接続先。自分のPCのgitから接続する外部のサービスであるgithubのような接続先。
openssh警告メッセージをでないように下記で設定
StrictHostKeyChecking no
UserKnownHostsFile=/dev/null
出ないようにして問題ないみたいなので、この通り設定。
/dev/nullとは何か?については下記のwikipediaを参照。
https://ja.wikipedia.org/wiki//dev/null
ssh接続のタイムアウト設定
ssh接続が切れないようにするために、下記の設定を行う。
ServerAliveInterval 15
ServerAliveCountMax 30
sshd サーバと応答確認する間隔を ServerAliveIntervalで設定できる。
15は15秒毎にクライアント側からサーバーに通信を行うという意味。
ServerAliveIntervalで設定した時間でサーバーから応答がない場合、
ServerAliveCountMaxで設定した回数の応答確認を行い、それでもサーバーからの応答がない場合は、タイムアウトとなる。15秒毎にクライアントからサーバー側に通信を行うことを30回繰り返す。それでも応答なければ、タイムアウトで接続が遮断される。
下記の記事を参考にしました。
gitの操作をするたびにパスワードを聞かれることを防止するために、下記を設定。設定すると、最初に1回のパスワード入力するだけで済む。
AddKeysToAgent yes
UseKeychain yes
ssh_configファイルで指定した秘密鍵だけを使用するために下記を設定。
IdentitiesOnly yes
.ssh/configファイルの書き方や設定内容の意味については下記の記事がわかりやすかったです。
globalなgitignore設定
MacOSなら.DS_Store、WindowsならThumbs.dbというファイルが自動生成される。このファイルをglobalなgitignoreに無視設定するのが良いとのことです。
global .gitignoreとは、~/.config/git/ignoreのこと。
上記に書いた設定はすべてのGitリポジトリについて最初に読み込まれるので、globalなgitignoreと呼ばれる。自分の環境に固有(OS種類など)の共通ignore設定を書くのに最適。
.DS_Storeを無視するように自分側で設定しておくことで、他の人に迷惑や手間が掛からないようになる。みたいなイメージ。自分側で無視設定してなかったら、他の人が自分でわざわざ無視設定しないといけなくなっちゃう。
global .gitignoreのためのディレクトリを作成
mkdir -p ~/.config/git
global .gitignoreのためのファイルを作成
touch ~/.config/git/ignore
globalに無視するファイルをignore内に書く
僕の場合はOSがWindowsなので、Thumbs.dbを書く。
$ cat <<EOF > ~/.config/git/ignore
> Thumbs.db
> EOF
上記でignoreファイルにThumbs.dbを追加できます。
僕はEOFって何?レベルの無知なので、EOFについての説明はこちらの記事を参照しました。
ここからは、便利な任意設定みたいです。僕は下記を設定しました。
Gitの任意な設定
gitファイルの大文字、小文字の変更を検知する設定
git config --global core.ignorecase false
とりあえず設定しました。
gitのcolorを設定
git config --global color.ui true
git config --global color.diff auto
git config --global color.status auto
git config --global color.branch auto
gitの日本語ファイル名をescapeさせないで表示させる。
git config --global core.quotepath false
マージ コンフリクトの見やすさを改善
git config --global merge.conflictStyle diff3
このマージコンフリクトは、変更の衝突を意味するみたいです。
まだがっつりgit使ってチームとかで使わない限り、なかなか発生し確認したりする機会はないと思うので、上記の記事をよく読んで理解しておきたいです。
以上の一通りのglobalなconfig設定を行ったので、
git config --global -l
にて内容を確認してみます。一番最初は、何も設定してなかったので、エラー表示出てましたが、globalなconfigの設定をしたので、さっき登録した設定内容が表示されました。
git config --global ....で設定した内容は、~/.gitignoreに保存される。
gitを使うのに便利なCLIツールをインストール
こちらはgitを使い始めてからでもよいかなと思いました。gitを使い始めたらあとでインストールしていくと思うので、こちらは忘備録として下記の記事を参考に後々インストールと設定を進めます。
Git Hub SSH接続の設定をする理由
GitHubにpushする際に、パスワードを聞かれ、入力が面倒くさいらしいです。SSH接続設定しておくことでこの手間が省略できるとのことなので、僕はまだGitもgithubも使ってもないですが、今のうちに設定しておきます。
GitHub用の秘密鍵と公開鍵を作成し公開鍵の方をGitHubに登録する
秘密鍵と公開鍵について、前少しだけ勉強したけど、もうすっかり忘れたので、また調べました。
僕なりのまとめ。
・秘密鍵と公開鍵のセットで使う。
・秘密鍵で通信内容を暗号化したら公開鍵でしか暗号化した通信内容を復号できない。
・逆に、公開鍵で通信内容を暗号化したら秘密鍵でしか暗号化した通信内容を復号できない。
・上記をおこなうことで、通信の機密性と通信が改ざんされてなく、正しい相手先(サーバー、クライアント)と通信していることが担保される感じ。
・サーバーまたはクライアント側のどっちかが秘密鍵と公開鍵を作成し、自分からみた相手先に公開鍵を配布する。
上記の理解を踏まえて、作業を進めていきます。
Github用の秘密鍵と公開鍵を自分で作成
ssh-keygen -t ed25519 -N "" -f ~/.ssh/github -C hoge@example.com
ssh-keygen コマンドは、sshの秘密鍵と公開鍵を作成するLinuxのコマンド。
-tは、鍵の種類を選択するオプション。ed25519が一番安心らしいので選択。
[-t dsa | ecdsa | ecdsa-sk | ed25519 | ed25519-sk | rsa]といった選択肢が表示されました、ssh-keygenの用法をターミナルで調べたら。
-Cは、Githubに登録しているメールアドレスを引数に渡す。
-Nは、パスフレーズを指定して渡す。なしであれば、「" "」を渡す。
パスフレーズって何?については、こちらの記事が分かりやすかったです。
-fはファイル名を指定する。デフォルトだと ~/.ssh/id_ed25519となる。ここでは、~/.ssh/githubとファイル名を指定。
秘密鍵は~/.ssh/githubファイル内に保存される。
公開鍵は~/.ssh/github.pubファイルに保存される。
cat ~/.ssh/github
cat ~/.ssh/github.pub
上記のようにcatコマンドでファイルを覗いてみると、鍵が表示されていることから鍵が作成されたことが分かる。
秘密鍵と公開鍵を自分のPCで作成したので公開鍵の方をGithub側に登録
公開鍵をコピーしてクリップボードに一時的に保存。
pbcopy < ~/.ssh/github.pub
上記をGit bashの端末で行うと、pbcopyコマンドが存在しないことが分かります。yumやpacmanコマンドなどパッケージ管理ツールがインストールされていないことも分かりました。なので、今回僕は、catで表示した内容をマウスで選択し右クリックでコピーしました。
githubの右上のメニューでsettingsをクリック→setteings画面に遷移される→左側のメニューからSSH and GPG keysをクリック。
new ssh keyをクリック→title入力→keyの欄にコピーした公開鍵をペーストしてadd ssh keyをクリックし登録。
※titleはPCの名前にしとくと管理しやすく良いみたいなのでPCの機種名にしました。
~/.ssh/configへ下記を追記
$ vi ~/.ssh/config
Host github.com
IdentityFile ~/.ssh/github
User git
Hostにgithub.comを指定、秘密鍵の参照ファイルのパスを指定、userにgitを指定。
上記だと事前に書いておいた項目とコンフリクトを起こすみたいなので、
# UseKeychain yesとして僕はコメントにしました。
ssh接続でhost先のgithub.comに接続できるかを確認
sshコマンドはLinuxコマンドで、リモートマシンに接続してリモートマシンでコマンドを実行するコマンド。
github.com上で今回はコマンドは何もしないので、-Tオプションを渡す。
-Tは、仮想端末の割り当てを禁止するオプション。
ssh -T github.com
接続に成功すると、下記の画像のように表示されます。
以上でssh接続の設定は完了です。次は、自分のPCに保管しているファイルをgithubにpushする作業を進めていきます。
別記事で書いていきます。