SSH

秘密鍵・公開鍵を作成する(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 )をバックアップしておく。

参考資料