cicleciからEC2に自動デプロイをするためにSSH Keyを設定したのに、
git pullがPermission deniedされてしまう...

ssh ${EC2_USER}@${EC2_HOST} 'cd ~/path && git pull origin master'

#!/bin/bash -eo pipefail
ssh ${EC2_USER}@${EC2_HOST} 'cd ~/test && git pull origin master'
Warning: Permanently added '************' (ECDSA) to the list of known hosts.
Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists. 

Exited with code exit status 1
CircleCI received exit code 1

上の事象には色々原因がありますが、SSH Keyがちゃんと設定されている場合はSSH Keyの作り方に問題があるかもしれません。

EC2サーバー内で以下のコマンドを実行してみてください。

EC2内
$ ssh -T git@github.com

もし「Hi ***! You've successfully authenticated....」とされれば別の問題ですが、

Enter passphrase for key '/Users/***/.ssh/':
みたいにパスフレーズを聞かれた場合はパスフレーズを設定しないSSH Keyを作り直してみてください。




パスフレーズを設定しないSSH Keyの設定手順

  1. パスフレーズなしのSSH Keyを作成
  2. authorized_keysに公開鍵を追加
  3. ~/.ssh/configを変更
  4. 公開鍵をGithubに登録する
  5. circleciに秘密鍵を登録

まずはEC2サーバー内でSSH Keyを作って設定を変更していきます。

パスフレーズなしのSSH Keyを作成

EC2内
$ ssh-keygen -t rsa -b 4096 -m pem -C "CircleCI" -f ~/.ssh/id_rsa_ci -N ""
Generating public/private rsa key pair.
Your identification has been saved in ~/.ssh/id_rsa_ci.
Your public key has been saved in ~/..ssh/id_rsa_sample.pub.
The key fingerprint is:
\*\*\*
The key's randomart image is:
+---[RSA 4096]----+
| .=o*oo          |
\•\•\•v
|      .     ...  |
+----[SHA256]-----+

authorized_keysに公開鍵を追加

作成したSSH Keyの公開鍵(.pubが付いている方)をauthorized_keysに追加します。

EC2内
$ cat ~/.ssh/id_rsa_ci.pub >> ~/.ssh/authorized_keys

~/.ssh/configを変更

~/.ssh/configのgithubの設定のIdentityFileの先を先ほど設定したSSH Keyの秘密鍵に設定します。
もしgithubの設定がされていない場合は下記を追加してください。

EC2内
Host github.com
HostName Github.com
IdentityFile ~/.ssh/id_rsa_ci
User git

公開鍵をGithubに登録する

EC2内で作った公開鍵をメモして、githubの対象レポジトリのDeploy keysに登録します。

EC2内
$ cat ~/.ssh/id_rsa_ci.pub
ssh-rsa ....

circleciに秘密鍵を登録

EC2内で作った秘密鍵をメモして、circleciのプロジェクトのSSH Keysに登録します。
circleciでは暗号化を解除した状態の秘密鍵を登録しないといけないので、opensslコマンドを使います。

EC2内
$ openssl rsa -outform pem < ~/.ssh/id_rsa_ci
-----BEGIN RSA PRIVATE KEY-----
\•\•\•
-----END RSA PRIVATE KEY-----

以下の作業が終わったらもう一度自動デプロイしてみてください!
successが出ることを祈っています😎
ほいでは