はじめに
新しいパソコンの購入やパソコンの切り替え際に、再セットアップを必要あると思います。
そのとき前のPCで行った初期設定は、なかなか思い出せないです。
一番困るのはsshキーの管理です。理由は個人と会社のGitHub, Bitbucket, GitLabとサーバー(AWS, Azure, GCP)などのアカウントに繋がるキー複数あるからです。
sshキー管理について、覚書として纏めます。
~/.ssh/config を分ける
個人と会社用ssh通信を以下のように分ける。
.ssh
├── conf.d
│ ├── personal
│ │ ├── config
│ │ ├── id_rsa
│ │ ├── id_rsa.pub
│ │ └── keys
│ │ └── *.pem
│ └── company
│ ├── config
│ ├── id_rsa
│ ├── id_rsa.pub
│ └── keys
│ └── *.pem
├── config
└── known_hosts
各ファイルに記述しているものを載せていきます。
# ~/.ssh/config
Include ~/.ssh/conf.d/**/config
Host *
ServerAliveInterval 300
AddKeysToAgent yes
※各フォルダのconfig例は後ほどで設定します。
SSHの秘密鍵・公開鍵を生成
個人用(Personal)
必要な情報
- | Default Github | Default Gitlab |
---|---|---|
SSH Key Name | id_rsa_github | id_rsa_gitlab |
name.github@example.com | name.gitlab@example.com |
キーの作成
ssh-keygen -f "~/.ssh/conf.d/personal/id_rsa_github" -t rsa -b 4096 -C "name.github@example.com"
ssh-keygen -f "~/.ssh/conf.d/personal/id_rsa_gitlab" -t rsa -b 4096 -C "name.gitlab@example.com"
会社用(Organization)
必要な情報
- | Default Github | Default Gitlab |
---|---|---|
SSH Key Name | id_rsa_github_companyName | id_rsa_gitlab_companyName |
name.github@company.com | name.gitlab@company.com |
キーの作成
ssh-keygen -f "~/.ssh/conf.d/company/id_rsa_github_companyName" -t rsa -b 4096 -C "name.github@company.com"
ssh-keygen -f "~/.ssh/conf.d/company/id_rsa_gitlab_companyName" -t rsa -b 4096 -C "name.gitlab@company.com"
SSH接続の設定をする
公開鍵を各アカウント(Github, Gitlab)に登録する
- 各アカウントのブラウザを開き、Settings->SSH and GPG keysに行きます。
- SSH keysのNew SSH keyをクリックします。
- Titleに適当な名前を付けます。
- 下のKeyに公開鍵を貼り付ける。
SSHキーをSSH-Agentに追加
# Run ssh-agent
ssh-agent bash
# Add the personal keys
ssh-add ~/.ssh/conf.d/personal/id_rsa_github
ssh-add ~/.ssh/conf.d/personal/id_rsa_gitlab
# Add the organisation keys
ssh-add ~/.ssh/conf.d/company/id_rsa_github_companyName
ssh-add ~/.ssh/conf.d/company/id_rsa_gitlab_companyName
# Confirm
ssh-add -l
各configを作成
個人用(Personal)のconfig
~/.ssh/conf.d/personal/config
Host github.com
HostName github.com
User git
IdentityFile ~/.ssh/conf.d/personal/id_rsa_github
Host gitlab.com
HostName gitlab.com
User git
IdentityFile ~/.ssh/conf.d/personal/id_rsa_gitlab
Host AWS
HostName 12.123.1.123
User ec2-user
Port 22
IdentityFile ~/.ssh/conf.d/personal/keys/awskey.pem
TCPKeepAlive yes
Identitiesonly yes
会社用(Organization)のconfig
~/.ssh/conf.d/company/config
Host companyname.github.com
HostName github.com
User git
IdentityFile ~/.ssh/conf.d/company/id_rsa_github_companyName
Host companyname.gitlab.com
HostName gitlab.com
User git
IdentityFile ~/.ssh/conf.d/company/id_rsa_gitlab_companyName
Host companynameAWS
HostName 12.123.1.123
User ec2-user
Port 22
IdentityFile ~/.ssh/conf.d/company/keys/awskey.pem
TCPKeepAlive yes
Identitiesonly yes
説明
キーワード | 内容 |
---|---|
Host | ホスト名 |
HostName | ホスト名またはIPアドレス |
User | ログインユーザ名 |
IdentityFile | ログインするための秘密鍵のパス |
Port | ポート番号(デフォルトは22) |
TCPKeepAlive | 接続状態を継続したい場合:yes 継続しない場合:no |
IdentitiesOnly | IdentityFileが必要な場合:yes 必要ない場合:no |
ServerAliveInterval | 一定期間サーバからデータが送られてこないときに、タイムアウトする秒数。(例) 120 |
接続の確認
ssh -T git@github.com
# 成功結果
# Hi [Username]! You've successfully authenticated, but GitHub does not provide shell access.
ssh -T git@gitlab.com
ssh AWS
ssh companynameAWS