[小ネタ]AWS CodeCommitのSSHキー登録~接続確認をサッと終わらせたいのでシェルを作った。

[小ネタ]AWS CodeCommitのSSHキー登録~接続確認をサッと終わらせたいのでシェルを作った。
2020.01.24

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

こんにちは。大阪オフィスの林です。

みなさま、CodeCommitのSSHkey登録~接続確認とかってどうされてますか?(めちゃザックリな問いかけ(-_-;))
SSHのkey作成から始めると考えると、おおむね下記のステップを踏む必要があると思います。

  • SSHのPrivate/Publickeyの作成
  • 作成したPublicキーの中身(body)をコピー
  • コピーしたPublicキーの中身(body)をIAMユーザーに割り当て(アップロード)
  • IAMユーザーへ割り当てたPublickeyに紐づくSSHキーIDを取得
  • 取得したSSHキーIDをもとにSSHConfigファイル作成(これは任意)
  • SSHの接続確認

    鍵など一回作れば飛ばしてしまえる作業ももちろんありますが初回は上記に書いた作業が必要になります。
    手間ですよね。僕は手間と感じたので自分用/自分備忘用ではありますがシェルを作成したので小ネタとして共有したいと思います。 なお、こちらにもCodeCommitのGitリポジトリへの接続方法はまとまっておりますので併せて参照ください。

    事前準備

    環境準備

  • CodeCommit用のIAMユーザーが作成済みであること
  • jqコマンドが利用できること(シェル内で使用しているため)

    シェルの中身

    ちなみに、シェル化といってもエラー処理も入れてなければ分岐もないですし、変数定義してコマンドをまとめているだけなので大したものではないです。わざわざシェルにせず、コマンドをペタペタコピペして使ってもらっても大丈夫です。

    ssh-reg.sh

    #key Create
    ###################################################
    #
    #今回「test-ssh-key」という名前でSSHの鍵を作ります。環境に応じて下記の「test-ssh-key」の部分を変えてください。
    #対象のIAMユーザーの名前を「codecommit-test-user」としています。環境に応じて下記の「codecommit-test-user」の部分を変えてください。
    #awscliは環境に応じて「--profile」オプションなどを入れてください。
    #
    ###################################################
    
    keyname=~/.ssh/test-ssh-key
    codecommituser=codecommit-test-user
    ssh-keygen -f $keyname
    aws iam upload-ssh-public-key --user-name $codecommituser --ssh-public-key-body "$(cat ${keyname}.pub)"
    keyid=`aws iam list-ssh-public-keys --user-name $codecommituser |  jq -r '.SSHPublicKeys[].SSHPublicKeyId'`
    
    
    #SSH Connect ConfigFile Create
    ###################################################
    #
    #ssh接続用のConfigファイルを作成しています。
    #
    ###################################################
    
    touch ~/.ssh/config
    echo "Host git-codecommit.*.amazonaws.com" >> ~/.ssh/config
    echo "  User $keyid" >> ~/.ssh/config
    echo "  IdentityFile $keyname" >> ~/.ssh/config
    chmod 600 ~/.ssh/config
    sleep 10s
    
    
    #SSH Connection Check
    ###################################################
    #
    #「git-codecommit.ap-northeast-1.amazonaws.com」に対して、作成した鍵でSSH接続できるか確認しています。
    #
    ###################################################
    
    ssh git-codecommit.ap-northeast-1.amazonaws.com

    やってみた

    実際にシェルを叩いてみます。
    ※ユーザーや鍵はすべて削除済みなので今回はマスクせずに書きます。

    sh ssh-reg.sh

    パスフレーズの入力を求められるので任意のパスフレーズを入力します。

    Generating public/private rsa key pair.
    Enter passphrase (empty for no passphrase):

    もう一回同じパスフレーズを入力します。

    Enter same passphrase again:

    鍵が出来ます。

    Your identification has been saved in /home/hayashimasaya/.ssh/test-ssh-key.
    Your public key has been saved in /home/hayashimasaya/.ssh/test-ssh-key.pub.
    The key fingerprint is:
    SHA256:mXuJWtjhVmGuHQfE3tc2txeyQF3sdIImS+Su/e65Dw0 hayashimasaya@HL00556
    The key's randomart image is:
    +---[RSA 2048]----+
    |         oo ..o. |
    |         o+.o..o.|
    |         o*=  oo.|
    |         *o+...++|
    |        S = E.o.=|
    |       + X + + ..|
    |      . X = . . .|
    |       + . . o   |
    |      .    o*o.  |
    +----[SHA256]-----+

    MFA有効にしている場合などはMFAのコードを求められるので入力します。

    Enter MFA code for arn:aws:iam::xxxxxxxxxxxx:mfa/cm-hayashi.masaya:

    MFAコード入力後、下記のような結果が表示されます。

    {
        "SSHPublicKey": {
            "UserName": "codecommit-test-user",
            "Status": "Active",
            "SSHPublicKeyBody": "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDQXz/nrvQ1h2BYg29B6CHp0gk1vwaOCk33hAuEmbdCwalaanmy4Ml0Gy8EQSEisPb2Eu3zPywMDJ6qpYnU3W2++v43vQGTxK5EaYFXIw58FHRS3MAndgGsdVOx7zQwIhcsjGMOKUNnnaedKcCubHAbGdAGR0TJ/40Qi4XeGGT7UT3II+Mgr3Ufs2Pp4GYVcA8HhST4p4xETP7egStaZN0bX+0U4z/wIDbOZwzaVuxHNvpXyfKUjYUT8ZhzsGlhu1RIp3kHAWaxUubhQXAEf7kcwIyB+XLb2/J4X+SjOk/HvQqVDv4QSb05f5vfg3ujI/7QgoiZ0NGKc5qP+l/PWnJx hayashimasaya@HL00556",
            "UploadDate": "2020-01-24T04:03:15Z",
            "Fingerprint": "ad:45:2f:e4:7b:03:b3:10:f7:00:fa:8d:4c:a5:8b:26",
            "SSHPublicKeyId": "APKAXIPMAVWMVZPOQ6NV"
        }
    }

    初めに入力したパスフレーズを入力します。

    Enter passphrase for key '/home/hayashimasaya/.ssh/test-ssh-key':

    「You have successfully authenticated over SSH.」とメッセージが表示され接続できたことが確認できます。

    You have successfully authenticated over SSH. You can use Git to interact with AWS CodeCommit. Interactive shells are not supported.Connection to git-codecommit.ap-northeast-1.amazonaws.com closed by remote host.
    Connection to git-codecommit.ap-northeast-1.amazonaws.com closed.

    一応マネージメントコンソールから見てみても登録されていることが分かります。

    確認のためcloneしてみる

    gitコマンドでcloneしてみます。

    #CodeCommitのリポジトリ名を「test-connect-repo」としています。環境に応じて下記の「test-connect-repo」の部分を変えてください。
    #ローカルリポジトリの場所と名前を「~/local-my-repo」としています。環境に応じて下記の「~/local-my-repo」の部分を変えてください。
    git clone ssh://git-codecommit.ap-northeast-1.amazonaws.com/v1/repos/test-connect-repo ~/local-my-repo

    初めに入力したパスフレーズを入力します。

    Cloning into '/home/hayashimasaya/local-my-repo'...
    Enter passphrase for key '/home/hayashimasaya/.ssh/test-ssh-key':

    問題なくcloneも出来てますね。

    remote: Counting objects: 3, done.
    Receiving objects: 100% (3/3), 219 bytes | 73.00 KiB/s, done.

    まとめ

    シェル化自体がどの程度役に立つのか分かりませんが、自分自身の知識の整理や理解の深堀にもつながりましたので結果的に良かったかなと思っています。ここに書いた情報が何かしらの参考になれば幸いです!

    以上、大阪オフィスの林がお送りしました!