Edited at

秘密鍵・公開鍵を作成する(Mac)

よく忘れるので、SSH接続に使う秘密鍵・公開鍵を作成するコマンドをメモしておきます。


概要

GithubやBitbucketなど色々なサイトへのアクセスに使うので、鍵の発行のやり方(コマンド)をメモしておく。


秘密鍵・公開鍵を作成する (接続元 - クライアント)

下記コマンドにて、鍵を指定のフォルダに作成する。


ターミナル

$ install -m 0700 -d ~/.ssh

$ cd ~/.ssh

$ ssh-keygen -t rsa -b 4096 -C "hoge@example.com" -f ~/.ssh/id_rsa
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase): <-- パスフレーズを入力(任意)
Enter same passphrase again: <-- もう一度、パスフレーズを入力(任意)
Your identification has been saved in id_rsa.
Your public key has been saved in id_rsa.pub.

$ ls ~/.ssh
id_rsa id_rsa.pub


※ id_rsa   (秘密鍵)・・・ クライアントPCに配置

※ id_rsa.pub (公開鍵)・・・ 接続対象サーバに登録


公開鍵を設置する(接続先 - サーバ)

カレントフォルダに「.ssh」がない場合は、下記コマンドで作成する。


ターミナル

$ install -m 0700 -d ~/.ssh


接続元(クライアントPC)で作成した公開鍵(id_rsa.pub)を「authorized_keys」に追記する。

$ vi ~/.ssh/authorized_keys

$ chmod 600 ~/.ssh/authorized_keys


パスフレーズを変更する

パスフレーズを設定したが、変更したい場合に下記コマンドで変更できます。

( パスフレーズが未設定の鍵にパスフレーズを追加も可能 )


ターミナル

$ ssh-keygen -p {古いパスフレーズ} -N {新しいパスフレーズ} -f ~/.ssh/id_rsa


ヒストリーにパスワードを残したくない場合は、以下の方が良いかもしれません。


ターミナル

$ ssh-keygen -f ~/.ssh/id_rsa -p

Enter old passphrase: // -> 古いパスフレーズ
Key has comment '~/.ssh/id_rsa'
Enter new passphrase (empty for no passphrase): // -> 新しいパスフレーズ
Enter same passphrase again:
Your identification has been saved with the new passphrase.


鍵の暗号強度の確認

$ ssh-keygen -lf ~/.ssh/id_rsa

4096 SHA256*******/*********************** hoge@MacBook-Air.local (RSA)


複数の公開鍵を使い分ける

接続時に -i オプションで鍵ファイルを指定することで、鍵を使い分けることができる。


ターミナル

$ ssh -i ~/.ssh/id_rsa.github -T git@github.com


~/.ssh/config に使用する鍵を列挙しておけば、鍵ファイルを勝手に探してくれます。


~/.ssh/config

IdentityFile ~/.ssh/id_rsa

Host github github.com
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa.github

Host bitbucket
HostName bitbucket.org
User hoge
IdentityFile ~/.ssh/id_rsa.bitbucket


OpenSSH 7.3以上の場合は、Includeが使えるので、個別ファイルに分割することもできるようです。

[OpenSSHのバージョン確認]


ターミナル

$ ssh -V

OpenSSH_7.4p1, LibreSSL 2.5.0

[ファイル構成]


/Users/hoge/.ssh/

├─ conf.d

│ ├─ bitbucket
│ └─ github
├─ config
├─ id_rsa
├─ id_rsa.bitbucket
└─ id_rsa.github

[各ファイルの内容]


/Users/hoge/.ssh/config

Host *

IdentitiesOnly yes
ServerAliveInterval 120
ServerAliveCountMax 10
IdentityFile ~/.ssh/id_rsa
TCPKeepAlive yes

Include conf.d/*


キーワード
説明

IdentitiesOnly
認証の際に、ssh_config ファイルで指定された秘密鍵のみを使用するよう指定。

ServerAliveInterval
一定期間サーバからデータが送られてこないときに、タイムアウトする秒数。

ServerAliveCountMax
sshがサーバからの返答を確認するまでに、サーバ生存確認メッセージを何回まで送るか。

TCPKeepAlive
システムが相手のマシンにTCP keepaliveメッセージを送るかを指定。これが送られると、接続の異常終了や相手マシンのクラッシュが正しく通知される。


/Users/hoge/.ssh/conf.d/bithub

Host github

HostName github.com
User hoge
IdentityFile ~/.ssh/id_rsa.github


/Users/hoge/.ssh/conf.d/bitbucket

Host bitbucket

HostName bitbucket.org
User fuga
IdentityFile ~/.ssh/id_rsa.bitbucket


多段SSH

自分のPC -> example(example.com) -> remotePC(172.0.0.1) へ接続する場合の記述。

Host example

Hostname example.com
User hoge
IdentityFile ~/.ssh/id_rsa

Host remotePC
HostName 172.0.0.1
User fuga
ProxyCommand ssh -CW %h:%p -4 example


注意すること

パソコンが故障した場合などに、別のパソコンでサーバーにアクセスすることが出来ない。

そのような場合に備えて、秘密鍵ファイル( id_rsa )をバックアップしておく。


参考資料