LoginSignup
8
2

More than 3 years have passed since last update.

remote.itを使用したAWSへのセキュアなリモートアクセス

Last updated at Posted at 2020-10-19

1. 今回の要約

  • remote.it CLIを使用して、Linuxへremote.itをインストールする
  • remote.itを使用して、AWSの踏み台サーバ(Bastion)へアクセスする
  • remote.itを使用して、VPC Private SunbetのInstanceへアクセスする

AWSのBastion(Linux)にremote.itをインストールして、remote.itターゲット(デバイス)として利用します。remote.itを使用すると、Bastionへのアクセスにオープンポート(セキュリティグループでのInboundアクセス許可)が不要になります。またremote.itでは、接続先(サービス)をremote.itのインストールされたデバイスにする他に、そのデバイスに繋がれたネットワーク上の宛先にすることができます。これを利用すると、Bastionへのログインを省いて、目的のサーバへのダイレクトな接続が行えます。

2. 構成

image.png

  • AWS VPC/Public Subnet上にあるBastionへremote.itをインストールします
  • BastionのOSはAmazon Linux2とします (その他Linux OSでも可)
  • 以下は事前に行われていることとします
    • remot.itアカウントの取得
    • 接続元Clientへのremote.it Desktop Appインストール

3. remote.itターゲットデバイス(Bastion)へのremote.itインストール

remote.it CLIソフトウェアの取得

remote.it CLIソフトウェアを入手します。各種プラットフォーム用のremote.it CLIソフトウェアの入手先URLは、以下を確認ください。

$ curl -LkO https://downloads.remote.it/cli/latest/remoteit_linux_x86_64
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
100 2875k  100 2875k    0     0  5509k      0 --:--:-- --:--:-- --:--:-- 5509k
$
$ ls -l
total 2876
-rw-rw-r-- 1 ec2-user ec2-user 2944900 Oct 12 09:37 remoteit_linux_x86_64
  • ダウンロードしたremote.it CLIを、実行パスの通ったディレクトリにコピーします(併せて、ファイル名を修正します)。コピーしたファイルに実行権限を付与してください。
$ sudo cp remoteit_linux_x86_64 /usr/bin/remoteit
$ sudo chmod +x /usr/bin/remoteit
$
$ ls -l /usr/bin/remoteit
-rwxr-xr-x 1 root root 2944900 Oct 12 09:45 /usr/bin/remoteit
  • remote.it CLIが正しく配置されたことを確認します。
$ sudo remoteit version
1.6.5

CLIサービスの登録と関連ツールのインストール

  • remote.it CLIサービスをsystemdに登録します。
$ sudo remoteit agent install
 ? Installed and started system service successfully
$
$ systemctl status it.remote.cli.service
● it.remote.cli.service - remote.it agent, manages connections
   Loaded: loaded (/etc/systemd/system/it.remote.cli.service; enabled; vendor preset: disabled)
   Active: active (running) since Mon 2020-10-12 09:53:31 UTC; 2min 25s ago
     Docs: https://docs.remote.it
 Main PID: 10206
   CGroup: /system.slice/it.remote.cli.service
           mq10206 n/a

Oct 12 09:53:31 ip-10-0-2-142.ap-northeast-1.compute.internal systemd[1]: Started remote.it agent, manages ....
Oct 12 09:53:31 ip-10-0-2-142.ap-northeast-1.compute.internal systemd[1]: Starting remote.it agent, manages....
Hint: Some lines were ellipsized, use -l to show in full.
  • 次に、remote.it CLIを利用して、関連バイナリのインストールを行います。
$ sudo remoteit tools install
 ? Installing tools
 ? Tools installed to: '/usr/bin'
$
$ ls -l /usr/bin |grep -e remoteit -e connectd -e muxer
-rwxr-xr-x 1 root root      162872 Oct 12 09:57 connectd
-rwxr-xr-x 1 root root        7588 Oct 12 09:53 connectd_options
-rwxr-xr-x 1 root root        7909 Oct 12 09:53 connectd_task_notify
-rwxr-xr-x 1 root root       34808 Oct 12 09:57 demuxer
-rwxr-xr-x 1 root root       30712 Oct 12 09:57 muxer
-rwxr-xr-x 1 root root     2944900 Oct 12 09:45 remoteit

remote.it へのサインイン

  • 最後に、remote.itアカウントでのサインインを行います。
$ sudo remoteit signin
Username: xxxxxxxx@stylez.co.jp [remote.itアカウントを入力]
Password:
 ? SIGNIN in progress ...
 ? Login with remote.it account
 ? Download & install dependencies
 ? NEXT-ACTION: run 'remoteit register' to register this device into your remote.it account
  • remoteit statusコマンドを使用すると、サインインされたことが確認できます。 ※Usernameに、サインインされたアカウントが表示されます
$ sudo remoteit status
 ? Fetching status

Username: xxxxxxxx@stylez.co.jp

Device:
No device...

Services:

Connections:

以上で、remote.it CLIを使用するための準備が完了しました。
次に、remote,itにターゲットデバイスとサービスを登録していきます。

4. remote.it ターゲットデバイスとサービスの登録

デバイスの登録

  • デバイスをremote.itに登録します。デバイス名を登録できますので、任意の名前(今回はremoteit-Linux-Bation)を入力してください。
$ sudo remoteit register
Device name: remoteit-Linux-Bastion
 ? REGISTER in progress ...
 ? Login with remote.it account
 ? Register device 'remoteit-Linux-Bastion'
 ? Applying config
 ? NEXT-ACTION: run 'remoteit add' to add services to this device
  • 登録したデバイスは、remoteit statusコマンドをjson(--json or -j)で表示させることにより確認することができます。
$ sudo remoteit status --json
{
  "device": {
    "name": "remoteit-Linux-Bastion",
    "id": "xx:xx:xx:xx:xx:xx:xx:xx",
    "state": "connected",
    "error": {
      "message": ""
    },
    "address": "127.0.0.1:65535",
    "startedAt": "2020-10-13T04:31:44Z",
    "pid": "13701"
  },
  "services": [],
  "username": "xxxxxxxx@stylez.co.jp",
  "connections": []
}

サービスの登録(デバイスローカル)

  • remote.itでは、デバイスに対してアクセスさせたい通信(特定ポート宛てのリモート接続)をサービスとして登録します。まずは、このデバイス(Bastion)宛てのSSH(TCP/22)を登録してみます。サービス名を登録できますので、任意の名前(今回はSSH)を入力してください。 ※希望のサービスタイプがメニューに無い場合には、tcpを選択してください
$ sudo remoteit add
× AVAILABLE TYPES
 ×     tcp - TCP
 ×     vnc - VNC
 ×     rdp - RDP
 ×     http-proxy - HTTP reverse proxy
 ×     https-proxy - HTTPS reverse proxy
 ×     ssh - SSH
 ×     http - HTTP
 ×     https - HTTPS
 ×     samba - Samba
 ×     bulk - Bulk
 ×     nx-witness - NX Witness
 ×     next-cloud - NextCloud
 ×     openvpn - OpenVPN
 ×     multiport - MultiPort
Service type: ssh
Port: 22
Service name: SSH
 ? ADD in progress ...
 ? Login with remote.it account
 ? Creating 'SSH' service named 'SSH' at '127.0.0.1:22'
 ? NEXT-ACTION: run 'remoteit add' to add more services
  • 登録したサービスは、remoteit statusコマンドをjson(--json or -j)で表示させることにより確認することができます。
$ sudo remoteit status --json
{
  "device": {
    "name": "remoteit-Linux-Bastion",
    "id": "xx:xx:xx:xx:xx:xx:xx:xx",
    "state": "connected",
    "error": {
      "message": ""
    },
    "address": "127.0.0.1:65535",
    "startedAt": "2020-10-13T04:31:44Z",
    "pid": "13701"
  },
  "services": [
    {
      "name": "SSH",
      "id": "xx:xx:xx:xx:xx:xx:xx:xx",
      "state": "connected",
      "error": {
        "message": ""
      },
      "address": "127.0.0.1:22",
      "startedAt": "2020-10-13T04:43:31Z",
      "pid": "13794",
      "disabled": false
    }
  ],
  "username": "xxxxxxxx@stylez.co.jp",
  "connections": []
}

サービスの登録(デバイスリモート)

  • remote.itのサービスはターゲットデバイス宛ての通信の他に、ターゲットデバイスを経由してそのデバイスに繋がれたネットワーク上にある、他のホスト宛ての通信(特定ポート宛てのリモート接続)を登録することができます。

  • つぎに、リモートホスト宛てのSSH(TCP/22)を登録してみます。リモートホスト宛てにサービスを登録する場合には、remoteit addコマンドに--hostname [hostname/ipaddress]オプションで、リモートホストを指定してください。サービス名を登録できますので、先程とは異なる任意の名前(今回はRemoteHost1-SSH)を入力してください。
    ※希望のサービスタイプがメニューに無い場合には、tcpを選択してください

$ sudo remoteit add --hostname 10.0.5.224
 × AVAILABLE TYPES
 ×     tcp - TCP
 ×     vnc - VNC
 ×     rdp - RDP
 ×     http-proxy - HTTP reverse proxy
 ×     https-proxy - HTTPS reverse proxy
 ×     ssh - SSH
 ×     http - HTTP
 ×     https - HTTPS
 ×     samba - Samba
 ×     bulk - Bulk
 ×     nx-witness - NX Witness
 ×     next-cloud - NextCloud
 ×     openvpn - OpenVPN
 ×     multiport - MultiPort
Service type: ssh
Port: 22
Service name: RemoteHost1-SSH
 ? ADD in progress ...
 ? Login with remote.it account
 ? Creating 'SSH' service named 'RemoteHost1-SSH' at '10.0.5.224:22'
 ? NEXT-ACTION: run 'remoteit add' to add more services
  • 登録したサービスは、先程同様にremoteit statusコマンドをjson(--json or -j)で表示させることにより確認することができます。
$ sudo remoteit status –json
{
  "device": {
    "name": "remoteit-Linux-Bastion",
    "id": "xx:xx:xx:xx:xx:xx:xx:xx",
    "state": "connected",
    "error": {
      "message": ""
    },
    "address": "127.0.0.1:65535",
    "startedAt": "2020-10-13T04:31:44Z",
    "pid": "13701"
  },
  "services": [
    {
      "name": "SSH",
      "id": "xx:xx:xx:xx:xx:xx:xx:xx",
      "state": "connected",
      "error": {
        "message": ""
      },
      "address": "127.0.0.1:22",
      "startedAt": "2020-10-13T04:43:31Z",
      "pid": "13794",
      "disabled": false
    },
    {
      "name": "RemoteHost1-SSH",
      "id": "xx:xx:xx:xx:xx:xx:xx:xx",
      "state": "connected",
      "error": {
        "message": ""
      },
      "address": "10.0.5.224:22",
      "startedAt": "2020-10-13T05:11:46Z",
      "pid": "14076",
      "disabled": false
    }
  ],
  "username": "xxxxxxxx@stylez.co.jp",
  "connections": []
}

以上で、ターゲットデバイスとサービスの登録が完了しました。
次に、クライアントから登録されたターゲットとデバイスを確認して接続を行います。

5. remote.itクライアントからのリモート接続

  • 接続元となるクライアント端末で、remote.itアプリを立ち上げログインします。
    image.png

  • Deviceタブに、登録したターゲットデバイス(remote.it-Linux-Bastion)が表示されています。接続するデバイス(remoteit-Linux-Bastion)をマウスで選択してください。
    image.png

  • デバイスに登録したサービスが2つ表示されています。以下の例では、サービス「SSH」はターゲットデバイス(Bastion)のローカルのSSHポートへ接続するサービスで、もう一方のサービス「RemoteHost1-SSH」は、ターゲットデバイス(Bastion)のネットワークに接続されたリモートホスト(Private Subnet上のEC2 Instance)のSSHポートへ接続するサービスとして登録されています。

  • サービス「SSH」の左にある緑色のCONNECTボタンをマウスで押下してください。
    image.png

  • サービスへの接続が施行され、ボタンが青色のDISCONNECTになれば接続完了です。この時、サービス名(SSH)の下にポート番号が表示されています(localhost:33000)。
    image.png

  • SSHで接続を行うためのTerminalソフトウェアを実行し、接続先を先程remote.itで確認したlocalhost:33000としてください。
    ※ユーザIDやPassword/Keyなどは普段ご利用のものを使用してください
    image.png

  • Bastionへの接続が行えました。remote.itがCONNECTしたBastionへの接続先をlocalhost:33000にマッピングしてくれています。そのため、remote.itを使用した場合には、Terminalの接続先がBastionのアドレスではなく、マップされたローカルのポートとなっています。
    ※このローカルのポートは、自動的に可変(33000以降)の番号が割り当てられるか、もしくは任意に設定ができます(一度接続したポート番号は次回接続時に再利用も可能です)
    image.png

次に、もう一つ登録したサービス(Privateサブネット上のEC2 Instance)への接続を行ってみます。

  • サービス「RemoteHost1-SSH」の左にある緑色のCONNECTボタンをマウスで押下してください。ボタンが青色のDISCONNECTになれば接続完了です。先程と同じように、サービス名(RemoteHost1-SSH)の下にポート番号が表示されています(localhost:33001)。
    image.png

  • SSHで接続を行うためのTerminalソフトウェアを実行し、今度は接続先を先程remote.itで確認したlocalhost:33001としてください。
    ※ユーザIDやPassword/Keyなどは普段ご利用のものを使用してください
    image.png

  • Private Subnet上にあるInstanceへの接続が行えました。Bastionのremote.itを経由して接続されていますので、Bastionへのログインは不要となります。
    image.png

  • 接続を終える場合には、クライアント端末のremote.itで、該当のDISCONNECTと表示されているボタンを押下します。ボタンが緑色のCONNECTになれば切断完了です。
    image.png

  • 一度接続したサービスは、Connectionsタブからでも接続が可能です。Connectionタブを使用することにより、目的のサービスを素早く見つけることができます。
    image.png

6. remote.it CLI その他の機能について

  • remote.it CLIのその他のオプションは、remoteit --helpにて確認することができます。また、各コマンドの詳細オプションが知りたい場合には、各コマンドの最後に同様に--helpと入力してください。
    image.png

  • インストールしたremote.itの各登録情報などを削除する場合には、以下のコマンドを使用してください。

コマンド 実行内容
remoteit delete サービスの登録削除
remoteit unregister デバイスの登録削除
remoteit uninstall 登録情報とソフトウェアの削除
8
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
2