AWS
SSH
EC2
RDP
sshポートフォワード

Proxy経由でEC2にSSHポートフォワードでRDPした話


はじめに

社内からだとProxyがきつくてssh(Secure Shell)やRDP(RemoteDisktop)が出来ないなんてことがあります。

RDPポートを空けてしまうとセキュリティ的にもリスクが高くなりますので、

AWS上の閉ざされたネットワーク内のサーバにアクセスする方法を実践してみました。


やりたいこと

Untitled Diagram-ページ9 (3).png

こっから繋いで・・・こう!!

sshで踏み台サーバに接続を行ない、sshポートフォワードで、ローカルで任意のポートを指定することで、

private(外部に接続していない)サーバへRDPで接続を行ないます。

私の環境だとポートが'80'と'443'しか空いていません。HTTPHTTPSだけですね。

sshのポートを変更することで対応していますが、Proxyによっては中身をちゃんと見てブロックしている場合もあります。


構成図

Untitled Diagram-ページ9 (1).png

ざっくりですがAWS側の構成はこんな感じですね。

BastionServer(踏み台サーバ)にはEIPを付与し、sshポートを'22' ⇒ '443'に変更しています。

NAT経由でpriveteサブネットに対してRDPポート(3389)をルーティングして下さい。

※構成については調べたら直ぐわかりますので割愛します。


設定方法


【1】.接続方法

今回は出来る男をアピールするためにOpnenSSHで接続します。

勿論、TeraTarmPuttyといったツールでも可能です。むしろそちらのほうが楽です。

私が使用しているPCがwindows7ですので、GitBashのインストール時に梱包されていたOpnenSSHを利用します。

Windows10だとPowershellに標準でインストールされていますので、Powershellで問題ありません。

念のためインストールされているか確認しておきます。

$ssh -V

OpenSSH_7.6p1, OpenSSL 1.0.2m 2 Nov 2017

認証方式は秘密鍵方式にします。特に理由はありません。

予めBastionServerでssh-keygenを利用して秘密鍵(privateKey.pem)を作成してあります。


【2】.ssh接続

ツールから設定する場合はProxyを指定する箇所がありますので簡単ですが、

直接繋ぐ場合はProxyCommandで指定する必要があります。

オプションの-iで事前に作成した秘密鍵を設定します。

-oで設定パラメータとなるproxyCommandを書き込みます。

今回は純粋なproxyとして使用するので、connect -Hで設定を行ないます。

最後はuser@globalIP -p 443でsshのポートを指定しつつBastionServerのユーザとIPを指定します。

※ 通常のsshなら'22'となります。

$ ssh -i privateKey.pem -o ProxyCommand='connect -H proxy.xxx.jp:80 %h %p' ec2-user@66.66.66.66 -p 443

Last login: Mon Feb 25 09:43:02 2019 from aaa.xxx.yyy.jp

__| __|_ )
_| ( / Amazon Linux 2 AMI
___|\___|___|

https://aws.amazon.com/amazon-linux-2/
6 package(s) needed for security, out of 8 available
Run "sudo yum update" to apply all updates.
[ec2-user@ip-10-0-1-10 ~]$

問題なくssh接続することが出来ました。


【3】.sshポートフォワードでRDP接続

次はsshポートフォワードを利用して、RDP接続を行ないます。

先ほどの接続文字に、-Lのオプションをつけるだけなので簡単です。

-L (ローカルで使用するポート):(目的サーバのアドレス):(目的サーバで待ち受けてるポート番号)

・ローカルで使用するポート:13389(何でもいいです。)

・目的サーバのアドレス:10.0.2.10(グローバルではないので注意)

・目的サーバで待ち受けてるポート番号:3389(RDPデフォルトポート)

$ ssh -i privateKey.pem -o ProxyCommand='connect -H proxy.xxx.jp:80 %h %p' -L 13389:10.0.2.10:3389 ec2-user@66.66.66.66 -p 443

Last login: Tue Feb 26 09:02:48 2019 from aaa.xxx.yyy.jp

__| __|_ )
_| ( / Amazon Linux 2 AMI
___|\___|___|

https://aws.amazon.com/amazon-linux-2/
6 package(s) needed for security, out of 8 available
Run "sudo yum update" to apply all updates.
[ec2-user@ip-10-0-2-10 ~]$

表示は通常のssh接続と変わりません。

sshを接続したままリモートディスクトップを開き、

localhost、または127.0.0.1と先ほど設定したポートを指定します。

image.png

入力したら「接続」ボタンを押下。

image.png

ログインパスワードの入力ウィンドウが表示されたら接続成功です!