プライベートなEC2に一時的にSSHする3つの方法

2018.03.03

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

おはようございます、加藤です。東京は気温が高くて過ごしやすいですね。

はじめに

プライベートなセグメントに一時的にSSH接続する方法をご紹介します。

下図の様な構成です。publicには色々インスタンスはあるが自分は触ることができない場合の対処方法です。

NewImage

パターン1 EC2の踏み台

NewImage

あるあるパターンです。自分用の踏み台を作ります。

  • public_subnetにインスタンスを立てる
    • インターネットからのSSH許可
  • インスタンスprivateのセキュリティグループ変更
    • bastionからのSSH許可

接続コマンドはこんな感じです。

ssh -oProxyCommand='ssh -W %h:%p ec2-user@ec2-13-x-x-x.ap-northeast-1.compute.amazonaws.com' ec2-user@ip-10-x-x-x.ap-northeast-1.compute.internal

作業が終了後、bastionは削除します。

インスタンスの上限数に注意する必要があります。

多段SSHについて詳細は下記のブログが参考になります。

ProxyCommandを使って踏み台(Bastion)経由で直接ssh/scpする

パターン2 EIPを割り当てる

NewImage

一時的にEIPを割り当てる方法です。パブリックじゃないならパブリックにすれば良いという発想ですね。

  • EIP割り当て
    • インスタンスprivateに関連付け
  • private_subnetのルーティング変更
    • x.x.x.x/32宛をインターネットゲートウェイ
      • アクセス元のパブリックIPアドレスで設定
      • セキュリティグループのソースをマイIPにするか、以下のコマンドで調べることができます
        • curl https://checkip.amazonaws.com/
  • インスタンスbastionのセキュリティグループ変更
    • インターネットからSSH許可

作業が終了後、EIPは関連付け解除・開放します。

EIPの上限数に注意する必要があります。

プライベートなサブネットという要件を一時的に破壊します。踏み台インスタンスを立てることができず、サブネット内に他にインスタンスがない場合などに使用します。

パターン3 ELB経由でSSHする

NewImage

ELB経由でSSH接続します。社内で教えてもらった方法です。

  • ELB(CLB)作成
    • TCP 10022をインスタンスprivateの22に転送
  • ELBのセキュリティグループ変更
    • インターネットからTCP10022許可
  • インスタンスprivateのセキュリティグループ変更
    • ELBからSSH許可

作業が終了したらELBを削除します。 制限などが理由でインスタンスにもEIPにも空きが無い時におすすめです。

ELB経由でSSH接続する

あとがき

ELBでSSHを聞いた時の衝撃で書きました。いざという時、この記事の事を思い出して頂き助けになれば幸いです。 結構長くなるかな?と思い書き始めましたが結果的には小ネタでした笑