EC2インスタンスにVScodeのRemote SSHで接続するまで(普段WSL利用者向け)


前提条件

  • 自分で作成した秘密鍵でSSHログインしたい。
  • WSLでいつもSSHを利用していて、秘密鍵の場所もWSLのhome以下の.sshで管理している。(秘密鍵の編集権限の設定に関わる。)
  • cloud9でもいいけど、結局VScodeが見やすく使いやすいのでVScodeで開発したい人向け。

流れ

  • EC2インスタンスに公開鍵をEC2インスタンスに登録。
  • VScodeでの設定。VScodeでRemote SSHをインストール。設定ファイルの場所を変更。
  • 秘密鍵の権限を設定。
  • configファイルを設定。

EC2インスタンスに公開鍵をEC2インスタンスに登録。

EC2インスタンスを起動。
vim ~/.ssh/authorized_keysに公開鍵を追記する(既存の公開鍵は削除してしまわないように)。
インスタンスがパブリックネットワークに置かれていること(参照先のルートテーブルにインターネットゲートウェイがあること)を確認する。
また、インスタンスのセキュリティグループの設定でSSHアクセスが許可されていることを確認する。

VScodeでの設定。

Remote SSHの設定で、設定ファイルの場所を以下(普段WSLでSSHで利用しているconfigファイルの場所)に変更。
秘密鍵もこちらに置いてある。
C:\Users\${Username}\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu18.04onWindows_79rhkp1fndgsc\LocalState\rootfs\home\${Username}\.ssh\config
新しくどこかにつくってもよいが、SSH系は一か所で管理した方が楽なので。
ただし、このようにすると秘密鍵の権限設定が少し必要になる。

秘密鍵の権限を設定。

WSKで作成した鍵は、Windows(VScode)側からはフルオープンになってしまっている。
確認方法は、エクスプローラーでファイルを右クリック
プロパティ⇒セキュリティ⇒詳細設定

こちらの権限を適切にしないと、VScodeからRemote sshで接続しようとするとpermission too openエラーが出てしまう。

以下、設定方法。
1. まず秘密鍵をコピー(失敗しても戻れるように)。失敗すると戻れなくなってしまう可能性あり。
1. コピー後のファイルで、権限変更をする。まず継承の無効化をする。
1. 無効化すると、ようやくユーザー以外のアクセスを削除できるようになる。

上記設定は、WSLのターミナルからであればsudo chmod 400 ./秘密鍵で済むが、Windows側から権限設定となると少し面倒。

注意点:毎回IPアドレスが変わるので、チェックする必要がある。もしくは、こちらの記事でドメイン名を取得し、インスタンス起動時に毎回IPアドレスをドメイン名と紐づけるように設定するとラク。

configファイルを設定。

ターミナル上でvim ~/.ssh/configでconfigファイルを編集。VScodeからもできる。
C:\Users\${Username}\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu18.04onWindows_79rhkp1fndgsc\LocalState\rootfs\home\${Username}\.ssh\configこちらでも良いし、WSL上での~/.ssh/configどちらでも同じファイルを編集することになる。

config
Host cloud9VScode
        HostName ${ip_address} or ${example.com}
        user ec2-user
        identityfile C:\Users\${username}\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu18.04onWindows_79rhkp1fndgsc\LocalState\rootfs\home\${username}\.ssh/秘密鍵

これで繋がります。