よく忘れるので、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 に使用する鍵を列挙しておけば、鍵ファイルを勝手に探してくれます。
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
[ファイル構成]
├─ conf.d
│ ├─ bitbucket
│ └─ github
├─ config
├─ id_rsa
├─ id_rsa.bitbucket
└─ id_rsa.github
[各ファイルの内容]
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メッセージを送るかを指定。これが送られると、接続の異常終了や相手マシンのクラッシュが正しく通知される。 |
Host github
HostName github.com
User hoge
IdentityFile ~/.ssh/id_rsa.github
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 )をバックアップしておく。