過去にAWS CodeCommitからSSHでリポジトリをクローンする際に自分の端末からSSH接続ができなくて困ったことがあったのですが、その理由があまりにもばかばかしかったので同じ過ちを犯さないよう残しておきます。
事象
途中から取引先のプロジェクトにアサインされることになったので、CodeCommitのリポジトリをSSHでクローンするよう言われたので秘密鍵をもらい、ポートがオープンになっていることを確認しうえでSSH接続をしようとすると
Permission denied (publickey)
が表示されてしまった。
原因と対応
SSHに関して初心者だったので訳が分からず色々調べてみたが、どうやらもらった秘密鍵に対して公開鍵が用意されていないのが原因でした。SSH接続するには公開鍵と秘密鍵が必要で、秘密鍵をクライアント端末に、公開鍵をサーバーに持たせなければいけません。
職場から秘密鍵をもらったのでてっきり公開鍵もサーバーに渡されているだろうと思っていたのだがそんなことはありませんでした。
ということでもらった秘密鍵をもとに公開鍵を作成し、作成した公開鍵をサーバーにアップロードすることで解決しました。
備忘録として手順を記載しときます
・.sshディレクトリに秘密鍵を配備する
# mv 【秘密鍵ファイル名】 ~/.ssh
・秘密鍵から公開鍵を作る
# ssh-keygen -y -f 【秘密鍵ファイル名】> ~/.ssh/【秘密鍵ファイル名】.pub
・公開鍵をIAMユーザーの認証情報→SSHパブリックキーのアップロードよりアップロードする
・.sshディレクトリにファイル「config」を作成し、configに以下を記述
Host git-codecommit.*.amazonaws.com
User 【IAMユーザーに記載されているSSHキーID】
IdentityFile 【秘密鍵のパス】(~/.ssh/【秘密鍵ファイル名】)
・configおよび秘密鍵の権限を変更する
# chmod 600 config, chmod 600 【秘密鍵ファイル名】
…これがないとPermissions 0755 for '/.ssh/glocalist_prod' are too open.
と表示される
・.sshディレクトリの権限を変更する
# chmod 700 .ssh
・接続テストを行う
# ssh git-codecommit.ap-northeast-1.amazonaws.com
…成功すればYou have successfully authenticated over SSH
が表示される
・gitコマンドよりCodeCommit上にあるプロジェクトをクローンする
# git clone 【クローン元のURL】 【クローン先のディレクトリ】
こうしてめでたくリポジトリをクローンすることができました。