やりたいこと
CircleCIに秘密鍵を登録したい。
CircleCIで$ git pushしたら自動デプロイも走るようにしたく、そのためにSSH鍵を登録する必要があった。
結局どうやって解決したのか?
秘密鍵のパスフレーズ(暗号化するための記述)があるのが原因だった。
秘密鍵のパスフレーズをなしに変更したら解決した。
CircleCIの公式ドキュメントを読んで、
- パスフレーズありの秘密鍵はCircleCIに登録できない。
- パスフレーズなしの秘密鍵はCircleCIに登録できる。
ということがわかったので、パスフレーズなしの秘密鍵を作成した。
秘密鍵のパスフレーズとは?何のためにあるの?
秘密鍵を暗号化するもの。らしい。
しかし、なぜ暗号化する必要があるんだ?何のために暗号化するんだ?
teratailに全く同じ質問をした人がいて、回答が載っていた。
https://teratail.com/questions/76995
パスフレーズを設定していると、自分のパソコン(ローカル)がウイルスに感染したときに被害を防止できる場合があるという。
あなたのパソコンがウィルスに感染したときに秘密鍵にパスフレーズを設定していると被害を防止できる場合があります。
この投稿を見て知ったのだが、秘密鍵を知られてしまうと、パソコンのデータ全部とられたり、GitHub上のデータが全部ウイルスに感染してしまう可能性があるらしい。
そんな恐ろしいことになるんですね。
少しでもそのリスクを下げられるなら、やっておいた方がいいということですね。
パスフレーズなんていつ作ったっけ?
$ cd .ssh
$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/xxxx/.ssh/id_rsa): (リターン)
Enter passphrase (empty for no passphrase): (パスフレーズを入力してリターン)
Enter same passphrase again: (パスフレーズを入力してリターン)
↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑
ここで生成してたわ!
何も押さずENTERで自動生成してたわ!
Your identification has been saved in /Users/xxxx/.ssh/id_rsa.
Your public key has been saved in /Users/xxxx/.ssh/id_rsa.pub.
The key fingerprint is:
93:b3:41:fe:3a:cb:ba:f3:6b:99:fe:6f:d4:21:dd:fb xxxx@local
The key's randomart image is:
+--[ RSA 2048]----+
| |
| |
| . . . |
| o . . o .|
| S o ..|
| * . .. |
| .o.. .|
| ..=. . E|
| oBB=.o. |
+-----------------+
パスフレーズを解除するやり方
調べてみたら、「なくす」というより「解除する」という方が正しいようだ。
「openssl」=「sslのパスフレーズを解除させる」という感じか?
openssl rsa -in パスあり秘密鍵 -out パスなし秘密鍵
例えば自分の場合だと
openssl rsa -in pfcmaster7118_key_rsa -out pfcmaster7118_second_key_rsa
pfcmaster7118_key_rsaだとCircleCIに登録できなかったけど、pfcmaster7118_second_key_rsaは登録できた。
ここが秘密鍵の文字列だけだったら、パスフレーズがなしになっているということです。
-----BEGIN RSA PRIVATE KEY-----
(秘密鍵の文字列)
-----END RSA PRIVATE KEY-----
ちょっとわかりにくいかもしれませんが、パスフレーズがありの場合は、秘密鍵の文字列の上に、2行記述があります。それがパスフレーズです。
-----BEGIN RSA PRIVATE KEY-----
(パスフレーズがある場合は、ここに2行書いてあります)
(秘密鍵の文字列)
-----END RSA PRIVATE KEY-----