カテゴリー
Apple

SSH 鍵を GitHub で管理する

Git 管理するにあたって守ることまとめ

  • GitHub の Private リポジトリで管理する
  • 秘密鍵は Git リポジトリに含めない

参考ページ

SSH 鍵管理の Git リポジトリの内容

リポジトリ名

dotssh としました。最初は .ssh としようかと思ったのですけれども、この名前ですと自動で作られるディレクトリと名前が重複しますので、変えました。

ディレクトリ構造

最初は dotssh/ に各接続先のディレクトリを作っておりました。後に Git 管理をするために考えましたところ、 git clone 後のパーミッション設定を簡単にしたいとの思いから、各接続先のディレクトリは dotssh/conf.d/ としました。

このディレクトリの下に全ての接続先設定を置くことにしましたので、パーミッション設定は chmod オプション dotssh/conf.d/ とすれば良くなりました。楽です♪

$ tree -ap dotssh/
dotssh/
├── [drwx------]  .git
... 略 ...
├── [-rw-------]  .gitignore
├── [-rw-------]  LICENSE
├── [-rw-------]  README.md
├── [drwx------]  conf.d
│   └── [drwx------]  conoha
│       ├── [-rw-------]  config
│       └── [-rw-------]  id_rsa
├── [-rw-------]  config
└── [-rw-------]  install.sh

40 directories, 57 files
$ 

git clone 後のセットアップについて

git clone 後、リポジトリの install.sh を実行すれば秘密鍵の配置以外は準備するようにいたしました。次の内容です。

#!/bin/bash

set -eux

readonly DOT_PATH=${HOME}/dotssh
readonly SSH_PATH=${HOME}/.ssh

[[ ! -e ${SSH_PATH} ]] && mkdir ${SSH_PATH}
chmod 700 ${SSH_PATH}
chmod -R u=rwX,go= ${DOT_PATH}
ln -sfv ${DOT_PATH}/config ${SSH_PATH}/config
  • ~/.ssh/ ディレクトリがなければ作る。
  • ~/dotssh/ ディレクトリ以下のパーミッションを設定する。
  • ~/.ssh/config にシンボリックリンクを作り、リンク先を ~/dotssh/config とする。

パーミッション設定については、 ファイルやディレクトリのパーミッションを一括で置換したい – Qiita のコメント が役に立ちました。これを読み、 man chmod で理解を深めました。

chmod -R u=rwX,go= ${DOT_PATH}

のオプションの意味は次のようになります。

  • -R: 指定ディレクトリ以下を再帰的に設定
  • u=rwX,go=:
    • u: ユーザーに対して設定する。
    • =: パーミッションをゼロに設定する。
    • r: 読込権限 (4) を付加する。
    • w: 書込権限 (2) を付加する。
    • X: 実行権限 (1) を付加する。ただし、ディレクトリに対してのみで、ファイルは対象外。
    • ,: 区切り。
    • g: グループに対して設定する。
    • o: その他に対して設定する。

SSH の設定ファイルの内容について

dotssh/config は次の内容となります。

Host *
  UseKeychain yes

Include ~/dotssh/conf.d/*/config

UseKeychain は Mac 固有の設定となります。名前の通り、キーチェーンアクセスを使って ssh 鍵のパスワードを入力してくれます♪次は man ssh_config からの引用です。

UseKeychain On macOS, specifies whether the system should search for passphrases in the user’s keychain when attempting to use a particular key. When the passphrase is provided by the user, this option also specifies whether the passphrase should be stored into the keychain once it has been verified to be correct. The argument must be yes'' orno”. The default is “no”.

各接続先の設定

conf.d/conoha/config の例です。

Host conoha
  HostName 150.95.200.203
  User username
  IdentityFile ~/dotssh/conf.d/conoha/id_rsa

これで、接続するときは、 ssh conoha でできるようになりました♪。ユーザー名も接続先も、秘密鍵のパスも、指定する必要はなく、楽です♪。ホストだけを指定すれば良いのです♪

おわりに

クローン後にセットアップスクリプトを実行するだけで即使えるようにはなりませんけれども、随分楽になるように感じます。

ssh 鍵に関しては、公開鍵、秘密鍵、どっちをクライアント・サーバのどっちに置くか、迷うことがあったのですけれども、今回管理するためのリポジトリを作成してみて、随分と理解が進んだように感じます♪。

以上です。

コメントを残す