LoginSignup
285

More than 3 years have passed since last update.

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

Last updated at Posted at 2017-07-02

よく忘れるので、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 )をバックアップしておく。

参考資料

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
285