ForgeVision Engineer Blog

フォージビジョン エンジニア ブログ

iPad でポートフォワーディングできるか?

こんにちは、AWS チームの尾谷です。

2023 年は本当に忙しかったです。
特に出張が多かったです。

2020 年に会社より貸与された Intel 製 MacBook Pro は、当初からバッテリー持ちが悪かったのですが、3 年以上が経過しドキュメント編集ももっさりしていて、Google Chrome も画面共有ができなくなって、ノマドワークのデバイスとしてはかなり使い勝手が悪い状況にありました。

プライベートで、2019 年に子供用に買ってあげたけど全然使っていない iPad Pro が自宅に余っていたので、初期化して業務用デバイスとして BYOL 申請して使うことにしました。7 月の JAWS ミートあたりから使い始めて、打ち合わせや議事録を取ったり、登壇での画面共有などを行ってきましたが、12 月まで快適に使えていました。

最近、Google スプレッドシートがアップデートされて、編集し辛くなったところはあるものの、マウス無しで直感的に操作できるのは非常にありがたいです。 ただ、今月お客様対応を進める際に、SSH ポートフォワーディングできず大いに困りました。

今日は、iPad で SSH ポートフォワーディングできるか検証したのでアウトプットしたいと思います。
結論から記載しますと、対応できるアプリがあるのかも知れませんが、Terminus では接続できるものの使いづらさがありました。

このブログでお伝えすること

  • なぜ業務で SSH ポートフォワーディングが必要なのか?
  • iPad のターミナルアプリは Terminus がオススメ
  • iPad で SSH ポートフォワーディングはできるが難点あり

SSH ポートフォワーディング

冒頭サラッとポートフォワーディングしていると書きましたが、お読みいただいている方は

  • 何のためにポートフォワードするのか?
  • お客様対応のどこで SSH ポートフォワーディングが出てくるのか?

と疑問に思われるかもしれません。少し長くなりますが、前提を記載させてください。

フォージビジョンの AWS 運用管理サービス

弊社が展開する AWS 運用管理サービスのメンバーは、リモートワーク環境でもセキュリティを担保しながらお客様環境にて作業を行うため、お客様側の環境にアクセスさせていただく際には、事前にお客様のサーバーのセキュリティグループなどを使って IP 制限をかけさせていただいております。

構成図にするとこんな感じです。

  1. 自宅からフォージビジョンのアカウントに接続する
  2. フォージビジョンのアカウントにはセキュリティグループで特定のパブリック IP からしか接続できないように設定してある
  3. フォージビジョンのアカウントからお客様アカウントにあるサーバーに SSH or RDP (場合によっては https など) でアクセスする
  4. お客様とご契約させていただいた際に、フォージビジョンアカウントの IP アドレスをお伝えし、お客様アカウントのセキュリティグループで接続許可をしていただく

踏み台サーバーは複数あります

コロナが始まった頃、AWS 運用管理チームの踏み台サーバーは 2 台しかありませんでした。
1 台は内部用の Windows の共有サーバーで、もう一台はお客様のアカウントに接続するための Windows 踏み台サーバーでした。
これらのサーバーは業務時間のみ起動するようにして、ログオンスクリプトとログオフスクリプトで入退室通知を行い、ログを s3 バケットに出力するようにしています。

ただ、ご契約いただくお客様が増えるにつれて、対応するメンバーも増えていき、メンバー同士の RDP 接続がバッティングするようになりました。
そこで、パブリックサブネットにいた Windows 踏み台サーバーをプライベートサブネットに複数台起動し、パブリックサブネットでは NAT インスタンスを起動しました。

NAT インスタンスに Windows 踏み台サーバーで利用していた Elantic IP アドレスを付与することで、お客様に IP アドレスの変更をお伝えすることなく、内部だけでスムーズに増改築することができました。

NAT インスタンスでポートフォワーディング

2023 年にリリースされた EC2 Instance Connect Endpoint *1 を使うとプライベートサブネットの Windows インスタンスにも RDP 接続ができます。

当時は EC2 Instance Connect Endpoint が存在しなかったので、以下のような構成をとり、NAT インスタンスでポートフォワーディングして接続してきました。

ポートフォワード先の踏み台インスタンスが Windows なので、NAT インスタンスに以下のようなコマンドを利用して、-L でポート指定して繋いできました。

ssh --file <キーペア> -L <自分のポート番号>:<踏み台ホスト名 or IP アドレス>:3389 --user ユーザー ID <踏み台ホスト名 or IP アドレス>

前置きが長くなりましたが、iPad でこのポートフォワーディングを行う方法が分かりませんでした。

iPad で SSH する

LibTerm を試してみた

そもそも、iPad にはターミナルがインストールされていません。
同僚がネットで LibTerm という怪しいアプリを見つけてくれたのですが、画像のような形でドキュメントから上のディレクトリにはいけるのですが、それ以上は上がれませんでした。

また、cat コマンドや grep コマンド、 wc コマンドは使えるものの、 vivim man コマンドはインストールされておらず、キーペアを保存する機能もないので、そっとアンインストールしました。

Terminus を試してみた

今日試した、Terminus であれば SSH ポートフォワーディングができました。

Termius: Terminal & SSH client

Termius: Terminal & SSH client

  • Termius Corporation
  • 開発ツール
  • 無料
apps.apple.com

まずポートフォワーディングするためのインスタンスを用意しました。
検証用の EC2 インスタンスを起動し、キーペアを設定し、セキュリティグループで SSH ポート (22) を開放しました。

次に、Terminus の左側のナビゲーションペインから Keychain を選択し、+ アイコンをタップ、Paste Key を選択、

表示されたダイヤログで、Name に任意の名前 (ここでは、otani-test-20231230.pem) を入れて、Private Key を Mac Studio からペーストしました。シームレスにコピペができる のは Apple 製品のいいところですね。

続いて、左側のナビゲーションペインから Hosts を選択し、接続先のホストを追加しました。
以下を設定して、

  • Alias: 任意の名前を入力しました。
  • Hostname: パブリック IP アドレスを指定しました。名前解決させたホスト名でも大丈夫です。
  • User: ec2-user を指定しました。
  • Password: 空欄のままにしました。
  • Key: 上記で作成した Keychain を指定しました。

アイコンをタップしたら繋がりました。

SSH は正常に接続できたので、一旦切断し、今度はポートフォワーディングを試しました。
ポートフォワーディングは、

Wizard に沿って進めていけば、迷うことなく設定ができました。

  • Port Forwarding: Local を選択しました。
  • Local Port Forwarding: Port Number にフォワーディングするポートを指定しました。Bind address は空欄にしました。
  • Select host: SSH 接続で利用したホストを利用しました。
  • Local Forwarding: Destination address はフォワード先の Windows インスタンスのプライベート IP アドレスを、Destination port は RDP (3389) を入力しました。

画面を切り替えると Terminus のセッションが切断されてしまう

ポートフォワーディングまではスムーズに進んだのに、iPad の Remote Desktop 接続がうまくできず 1 時間程度ハマってしまいました。
原因は、iPad のタスクを切り替えたタイミングで、Terminus のポートフォワーディングが切断されていたことでした。
Remote Desktop は接続中のままエラーメッセージが表示されず、これがハマりポイントでした。

いろいろ試行錯誤する中、マルチタスクを有効にして確認したところ、接続できました。
でも、こんな画面半分の状態だと使い辛いし、隠れた部分が多いためオペミスに繋がるので本番利用は厳しいと感じました。

ということで、iPad を使ってポートフォワーディングはできました。

iPad は機動性がありますが、やはり業務に完全対応するのは課題がありますね。
M3 Mac がリリースされたので、リプレースを会社と相談してみようと思います。

以上です。
最後までお読みくださりありがとうございました。

*1:EC2 Instance Connect Endpoint を知りたい方は AWSJ 山崎さんのスライド が分かりやすかったので、ご紹介しておきます。