Mosh | |
|---|---|
![]() Mosh、断続的なネットワーク接続とローカルエコー機能に関する警告を表示 | |
| 原作者 | キース・ウィンスタイン |
| 初回リリース | 2012年3月12日 (2012年3月12日) |
| 安定版リリース | 1.4.0 / 2022年10月26日[1] ( 2022-10-26 ) |
| リポジトリ |
|
| オペレーティング·システム | Unix系システム |
| タイプ | ユーティリティソフトウェア |
| ライセンス | OpenSSLとiOS の例外を含むGNU GPLv3 |
| Webサイト | mosh.org |
コンピューティングにおいて、Mosh(モバイルシェル)は、クライアントコンピュータからインターネット経由でサーバーに接続し、リモートターミナルを実行するためのツールです。[2] MoshはSSHに似ていますが[3] 、モバイルユーザーの使いやすさを向上させるための追加機能を備えています。主な機能は以下のとおりです。
- Moshは、別のWi-Fiネットワークに移動したり、Wi-Fiから3Gに変更したりするなど、「ローミング」(クライアントエンドポイントが異なるIPアドレスに変更される)した場合でもセッションを維持します。[4]
- Moshは、ユーザーがインターネット接続を失ったり、クライアントを「スリープ」状態にしたりした場合でも、端末セッション(MoshはUDPを使用するため、TCP的な意味での「接続」ではありません)を維持します。一方、SSHはTCPがタイムアウトしたため、このような場合に接続を失う可能性があります。[5]
- Moshクライアントは、ネットワークの遅延deleteを待たずにキーボードイベント(入力、キーによる文字の消去など)に応答しようとします。サーバー上で実行されているアプリケーションがユーザーのキー入力や削除をエコーするかどうかを予測する適応型システムを採用しています。 [6] [7]
Moshの主な欠点は、サーバーに追加の前提条件があること、SSHの特別な機能(接続転送など)が欠けていること、ネイティブの Windowsクライアントがないことなどです。[2] Linuxサーバー(サーバーへのインストールは依然として必要)の代替手段は、通常のSSH接続に加えてGNU Screenを使用することです。
デザイン
MoshはSSHとは異なるレイヤーで動作します。SSHはTCPを用いて各方向(サーバーからクライアント、またはクライアントからサーバー)にバイトストリームを送信しますが、Moshはサーバー側で端末エミュレータを実行し、画面に何を表示するかを判断します。[2]サーバーは、ネットワーク速度に応じて変化するフレームレートでこの画面をクライアントに送信します。[8]これにより、Moshは低速接続や断続的な接続でもネットワークトラフィックを節約できます。
サポートされているプラットフォーム
Moshは、ほとんどのLinuxディストリビューション、macOS、FreeBSD、NetBSD、OpenBSD、Android、Solaris、Cygwin、Chromeアプリで利用できます。[2] iOSプログラムTermiusには、Moshプロトコルの独立した実装が含まれています。[9]
パフォーマンス
ローミング
Moshは状態同期プロトコル(SSP)[10]を基盤としており、これは単一パケットローミング[11]をサポートしています。クライアントが新しいIPアドレスに切り替えた後、サーバーに正常に到達する単一のパケットだけで接続を「ローミング」できます。クライアントはローミングしたことを認識する必要はありません。( NATルーターがローミングしているとき、クライアントはNATが有効なネットワーク上にいる可能性があります。) [8]
パケット損失
Moshの研究論文[8]では、作成者はパケットロスが29%のリンクでSSPをテストし、TCPを使用するSSHと比較して、SSPは平均応答時間を50分の1(16.8秒から0.33秒)に短縮することを発見しました。スタンフォード大学の学生による別の研究では、SSPは平均応答時間を30分の1(5.9秒から0.19秒)に短縮することがわかりました。[12]
ローカルエコー
Moshの開発者によると、このプログラムはユーザーのキー入力の70%を予測し、即座に表示することができることが確認された[2] [8]。これにより、キー入力に対する平均応答時間が5ミリ秒未満に短縮され、ネットワークの遅延が隠蔽された。スタンフォード大学の学生による別の研究では、Moshはユーザーのキー入力の55%を素早くエコーできることがわかった[13] 。
欠点
より普及しているSSHと比較すると、Mosh には次の欠点があります。
サーバーの前提条件
Moshの大きな欠点は、ssh自体には必要のない追加の前提条件をサーバーが満たす必要があることです。Moshの設計上、サーバーはUDP経由の直接接続を許可する必要があります。[14]これらの前提条件を満たさないサーバーはMoshで使用できません。このようなシステムの例としては、sshポートへのTCP経由の接続を制限するファイアウォールの背後にあるサーバーが挙げられます。また、間接的にしかアクセスできないサーバーも問題となります。後者は通常、sshの「ProxyCommand」オプションによって対応されますが、Moshではサポートされていません。[15]
接続ごとに1つのポート
デフォルトでは、サーバーは接続ごとに60001~61000の範囲にある最初の空きUDPポートを割り当てようとします。この動的なポート割り当ては、ファイアウォールのメンテナンスにとって余分な負担とリスクをもたらすと考えられています。 [16]ファイアウォールフィルタリングの大部分は、接続追跡、いわゆるステートフルフィルタリングによって行われます。これはTCPセグメントのSYN/ACKフラグに基づいていますが、UDPパケットにはこのようなフラグはありません。[17]
緩和:
- サーバーのUDPポートはMosh接続ごとに設定できるため、限られた数のポートのみを開く必要がある[18]
- ディープパケットインスペクションファイアウォールとアプリケーションファイアウォールは、パケットの内容を調べて最初の接続に関連付けることで、これをより適切に処理できます。
出力のドロップと端末のスクロールバックの欠如
This section needs to be updated. The reason given is: We are at release 1.4 now, the section talks about features that will arrive in 1.3 (not sure if they ever did). (December 2023) |
スクロールバックはMoshの現在のリリースではサポートされておらず、スクロールバー付きのターミナルエミュレータで使用するとスクロールバーが消えてしまいますが、1.3リリースでサポートされる予定です。[19]この機能は、バイナリ出力が消去されるため、ガベージクリーニングとのトレードオフとなります[明確化が必要] 。この問題を軽減する方法の一つは、Moshをscreenやtmuxなどのターミナルマルチプレクサと組み合わせて使用することです。[20]
ssh-agent転送の欠如
ssh-agent転送は現在サポートされていません。[21]
X11転送の欠如
X11転送はまだサポートされていません。[22]
参照
参考文献
- ^ 「mosh-1.4.0 リリース · mobile-shell/Mosh」。GitHub。
- ^ abcde 「Mosh: the mobile shell」。2013年3月28日閲覧。
- ^ Brockmeier, Joe. 「Into the Mosh Pit: A Mobile Shell Replacement for SSH」 Wayback Machine 2014年3月20日アーカイブ、linux.com、2012年4月10日。2013年3月28日閲覧。
- ^ Delony, David. 「Mosh: Secure Shell Without the Pain」、Technopedia、2012年10月19日。2013年3月28日閲覧。
- ^ Cox, John. 「MITの研究者がモバイルインターネットプロトコルへの新たなアプローチを計画」Wayback Machineに2012年10月18日アーカイブ、Network World、2012年7月6日。2013年3月28日閲覧。
- ^ Beckert, Axel. 「MoshとAutoSSH:低速または絶えず変化するネットワークでの作業を楽にするリモートシェルツール」、Linux Magazine、2012年11月。
- ^ Leyden, John. 「MITのmind-reading MoshがSSHデーモンと対決」The Register、2012年4月13日。2013年3月28日閲覧。
- ^ abcd Winstein, Keith. 「Mosh: モバイルクライアント向けインタラクティブリモートシェル」、USENIX Annual Technical Conference 2012、マサチューセッツ州ボストン、2012年6月14日。
- ^ 「Termius の機能」、Crystalnix。
- ^ 「MITがモバイルクライアント向けの新しいインターネットプロトコルを発表」
- ^ Winstein, Keith、Balakrishnan, Hari. 「Mosh: モバイルクライアント向けインタラクティブリモートシェル(より詳細なドラフト)」. 2013年3月28日閲覧。
- ^ Nagaraj, Kanthi、McMilin, Emily. 「Mosh」、Reproducing Network Research、2013年3月14日。2013年3月28日閲覧。
- ^ Aljunied, Ahmed. 「Mosh 'Mobile Shell' パフォーマンス結果の評価」、Reproducing Network Research、2013年3月13日。2013年3月28日閲覧。
- ^ 「Mosh は SSH 経由でユーザーをログインさせ、UDP ポート 60000 から 61000 の間で接続を開始します。」、2014 年 6 月 19 日取得。
- ^ 「Moshバグレポート#285: ProxyCommandベースのSSH接続が使用できない」、2014年6月18日閲覧
- ^ 「広範囲のポートを開放することの危険性? (mosh)」、IT セキュリティ (Stack Exchange)、2012 年 4 月 13 日。2013 年 3 月 28 日に閲覧。
- ^ 同じUDPポートに複数のセッションを多重化する
- ^ 「-p を使用してリモート UDP ポートを定義する」
- ^ https://github.com/keithw/mosh/issues/2 「バージョン 1.3 でスクロールバックのサポートが予定されています」
- ^ 「スクロールバックと代替画面(以前は: smcup/rmcup で代替画面を使用)」
- ^ 「SSHエージェント転送」
- ^ 「X転送をサポート」
