Edited at

SSH ポートフォワディングで社内 PROXY 環境から AWS にリモートデスクトップ接続する

More than 1 year has passed since last update.


目的

 社内 HTTP プロキシに阻まれて AWS 上の Windows Server にリモートデスクトップ接続できなかったため、SSH ポートフォワーディングを許可した Linux インスタンス経由でのリモートデスクトップ接続や SQL Server 接続をしました。その記録です。


概念図

こんなかんじ

AWS Design (1).png

(作図は Cacoo を使いました)


構成


  • 踏み台となる Linux インスタンス はポートフォワーディングを許可します


    • サーバ:LinuxServer

    • 接続プロトコル:SSH 22

    • EIP で接続します



  • 接続確認のため、EC2 でWindows インスタンス、RDS で SQL Server を作成しました


    • WindowsServer


      • 接続プロトコル:RDP 3389

      • EIP で接続します



    • RDS-SQLServer


      • 接続プロトコル:SQLServer 1433

      • エンドポイントで接続します





  • ローカル端末 は PuTTY を導入してポートフォワーディングの設定をします


    • LOLACMACHINE


      • Windows 7 32bit

      • PuTTY ごった煮版 0.60



    • 使用するローカルポート:10000、100001



  • 社内のプロキシサーバは HTTP プロキシのみ許可されています、外から見るとグローバル IP が1つです。毎度いろんなことの邪魔をしてくれます。


    • PROXYSERVER:8080



サーバ名はぼかして書いていますので、ホスト名または IP が入るものと読み替えてください。


手順


事前準備


踏み台 Linux インスタンス作成

 ポートフォワーディングを許可する Linuxサーバを1つ作成しました。


  • LinuxServer


    • EIP 設定

    • セキュリティグループ:社内ネットワークのグローバルIP:22 Inbound のみ許可




接続確認用インスタンス作成

 接続確認用として EC2 と RDS をそれぞれ作成してみました。


  • WindowsServer


    • EIP 設定

    • セキュリティグループ:LinuxServer:3389 Inbound のみ許可



  • RDS-SQLServer


    • セキュリティグループ:LinuxServer:1433 Inbound のみ許可




LinuxServer

SSHD にポートフォワーディングの設定を行います。


console

$ sudo vi /etc/ssh/sshd_config


変更箇所(行頭コメント#を取るだけ)


vi

AllowAgentForwarding yes


サービス再起動


console

$ sudo service sshd restart

Stopping sshd: ​​​​​ [ OK ]
Starting sshd: [ OK ]


ローカル端末(LOCALMACHINE)

 PuTTY ごった煮版(putty-0.60-JP_Y-2007-08-06) を導入しました。設定したのは以下のとおりです。設定後に起動して接続しておきます。読みはプティじゃなくパティです。


  • セッション


    • ホスト名:LinuxServer

    • ポート:22



  • 接続


    • データ


      • 自動ログインのユーザ名:ec2-user



    • プロキシ


      • プロキシホスト名:PROXYSERVER

      • ポート:8080

      • ユーザ名:USERNAME

      • パスワード:PASSWORD



    • SSH


      • Keepalive の間隔:30

      • 認証




      • トンネル


        • ローカルポートは他のホストからの接続を受け入れる:チェック

        • WindowsServerの設定追加


          • 源ポート:10000

          • 送り先:WindowsServer:3389

          • ローカル:チェック

          • IPv4:チェック



        • WindowsServerの設定追加


          • 源ポート:10001

          • 送り先:RDS-SQLServer:1433

          • ローカル:チェック

          • IPv4:チェック









 源ポートって日本語あやしいですね。みなもとポートと読むんですか。

 必要に応じてファイアーウォールの設定を行います。localhost で使用する場合は設定不要ですが、トンネルサーバとして公開する場合などに必要になります。


  • Windows Firewall


    • TCP


      • プロトコルおよびポート


        • ローカルポート

        • 特定のポート:10000-10001



      • 詳細設定


        • ドメイン:チェック








接続確認

 リモートデスクトップ、できました。

image

 RDS-SQLServer も接続できました。なんでカンマ区切りなのこれ。

image


補足:Windows 向けの SSH Tunnel Manager

 今後接続先をふやしていくにあたって、PuTTY で接続先管理したり、接続が切断されたときのリトライ処理をするのがしんどそうなので Windows 向けの SSH Tunnel Manager (SSH Tunnel Daemon とも呼ぶらしい)を探していくつか試しました。

image

すごいどうでもいいけど、About 画面がツボでした。

CURSOR DISCO! JOIN IN!

disco3.gif

 ほかにも、接続先を管理する用のテキストファイルと、それを読み込んで plink.exe を起動、切れたらリトライするようなバッチファイルを作っておいてもいいかなと思いました。コマンドサンプルです。

plink.exe -ssh -load PUTTYSESSIONNAME ec2-user@LinuxServer -P 22 -i C:\LINUXSERVERPRIVATEKAY.ppk -v -N -L 10000:WindowsServer:3389 -L 10001:RDS-SQLServer:1433

 Mac だと SSH Tunnel Manager というのがメジャーなようです。


参考リンク

(お世話になりました)

(以上)