このアプリでできることを、必要になるであろう順に一通り。最初のSSHホストを追加するところから、家に置いてきたMacの4番目のディスプレイを操作するところまで。iPhone・iPad向けのSharkTTYと、無料のMacコンパニオンSharkTTY Deskのためのガイドです。
自分のサーバーに接続するのにアカウントは不要です。ここで説明する機能はすべて無料です。
SharkTTYは、標準のsshdが動いているものなら何にでもシェルを開きます——VPS、NAS、Raspberry Pi、ワークステーション。素のSSHなら相手側に何もインストールする必要はありません。MoshとETはそれぞれ小さなサーバー側パッケージを必要としますが、どちらも任意です。
設定を開き、ホストタブに移動して右上の+をタップします。新しいホストには、必ず入力する項目が4つと、最初は無視してよい項目がいくつかあります。
パスワードには2つのモードがあります。パスワードを保存すると、この端末のiOSのKeychainに保管されます。同期をオンにすればiCloud Keychainを通じてエンドツーエンドで持ち歩けます——私たちのサーバーを経由することはありません。接続時に入力は何も保存せず、毎回たずねます。ワンタイムコードやハードウェアトークンのように、サーバー側が独自のプロンプトを出す場合は、代わりにキーボードインタラクティブ / 2FAを選んでください。接続時にプロンプトへ答える方式で、何も保存されません。
ホストを保存し、タップすれば接続します。ホスト一覧では、シングルタップで選択、ダブルタップでそのまま接続します。
すでに設定ファイルがある場合
設定 → ホスト → SSH 設定から読み込むでは、貼り付けた ~/.ssh/config か、選んだファイルを読み込めます。取り込まれるのはホストのエイリアス、アドレス、ユーザー名、ポートだけで、パスワードや秘密鍵は決して取り込まれません。ProxyCommandを使う項目はスキップされ、ProxyJumpのある項目は直接接続として取り込まれます。踏み台ホストは後から手動で指定してください。
鍵は設定のアカウントタブにあります。+をタップして、鍵を生成、テキストを貼り付けて追加、ファイルからインポートの3つから選びます。
秘密鍵はiOSのKeychainの中にとどまります。鍵ごとにiCloud で同期をオンにすると、iCloud Keychainを通じてほかの端末へ渡ります——Appleがパスワードに使っているのと同じエンドツーエンドの経路であり、私たちのサーバーではありません。SharkTTYのクラウドアカウントにサインインすると、ホスト、スクリプト、ドライブのマッピング、テンプレートが同期されますが、パスワード、秘密鍵、パスフレーズは明示的に同期されません。
ホストエディタに戻り、認証 → 方式 → 鍵で、そのホストに使う鍵を選べます。一覧が空の場合はその旨が表示され、先にアカウントタブへ案内されます。
サーバーに初めて接続すると、SharkTTYはホスト鍵を取得し、SHA256のフィンガープリントを信頼して接続ボタンとともに表示します。サーバー管理者が公開しているフィンガープリント、あるいはサーバー上で ssh-keygen -lf が出力する値と見比べてください。受け入れると、その値が記録されます。
その鍵が変わった場合、接続はそのまま続行されず、警告とともに止まります。正直に読み解けば、サーバーが再インストールされたか鍵が更新されたか、あるいは誰かがあなたとサーバーの間に入っているかのどちらかです。どちらなのかが分かっているときだけ、新しい鍵を信頼して再接続を使ってください。
自分で作り直したサーバーなど、意図的に記録をやり直したいときは、ホストを開いて記録したホスト鍵を消去を使います。次の接続で、新しいフィンガープリントの確認を最初から求められます。
3つとも対話シェルを開ける点は同じです。違いは、サーバー側に何が必要かと、足元のネットワークが変わったときに何が起きるかです。
| 接続方式 | サーバー側に必要なもの | ネットワーク変化に耐えるか | 知っておきたいこと |
|---|---|---|---|
| SSH(直接) | sshd 以外は不要 | いいえ | すでに ssh で入れるホストならそのまま使えます。 |
| Mosh(高速化) | mosh-server | はい(UDP経由) | Wi-Fiとモバイル回線をまたいで移動でき、遅延が跳ね上がったときは入力をローカルにエコーします。 |
| ET(実験的機能) | etserver、既定ではポート2022 | はい(TCP経由) | UDPを完全に遮断するネットワーク向け。既定ではオフなので、まず設定でオンにしてください。 |
Moshは入力内容を予測し、サーバーの応答を待たずに画面へ反映します。設定 → ターミナル → 既定の予測モードでは、回線が遅いときだけ予測を有効にする適応的のほか、常にとしないを選べます。既定は適応的で、ほとんどの人にはこれが適切です。
ETはまだテスト中で、設定でET(Eternal Terminal)トランスポートを有効にするまではオフのままです。有効にすると、ホストエディタに3つ目の接続方式として現れます。ひとつ考慮しておきたい点があります。MoshのUDPと同じく、ETのデータ接続は端末からetserverのポートへ直接向かい、踏み台ホスト経由では転送されません。
iOSは画面から消えたアプリをほどなく休止させるため、モバイルのターミナルがTCP接続を永久に保つことはできません。SharkTTYはこれを2つの層で扱います。
どの接続方式でも最も頼りになるのは、サーバー側の多重化ツールです。tmux new -A -s mobile のような接続スクリプトを設定しておけば、再接続のたびに新しいシェルではなく同じセッションへ再アタッチします。スクリプトについては次で説明します。
待ち時間を大きく減らせる、もうひとつの小さな設定があります。設定でベルのシステム通知をオンにしてください。ターミナルがベルを鳴らしたとき、そのセッションが今見ているものでなければ、iOSが通知を出します。長時間かかるコマンドの末尾に printf '\a' を足しておけば、終わったときにスマートフォンが教えてくれます。
SharkTTYのスクリプトとは、接続が開いた直後にターミナルで実行されるシェルのテキストです。設定 → スクリプトで+をタップし、空のスクリプトから始めるか、テンプレートから新規…を選びます。
テンプレートの一覧は、人が実際に再接続する理由ごとにまとまっています。
ホストのプラットフォームを設定しておくと、一覧はそのマシンに合うテンプレートだけに絞り込まれるので、Alpineのマシンにaptのテンプレートをすすめられることはありません。テンプレートが生成した内容は自由に編集でき、テンプレートとして保存すれば自分用の版を次回に残せます。
ホストエディタでスクリプトを紐づければ、接続のたびに実行されます。あるいはホストは素のままにしておき、接続時に選ぶこともできます。ホスト一覧ではスクリプトで接続とそのまま接続が別々の操作になっており、スクリプトをダブルタップするとそのスクリプトで接続します。
システムキーボードの上には、ターミナルに必要でiOSにはないキーを並べたキーボード補助バーがあります。Esc、Ctrl、Tab、矢印キーに加えて、ファイルのアップロード、キーボードの表示・非表示、ポインティングデバイスの有効化のボタンも並びます。
設定 → キーボード → 入力パネルで、システムキーボードとSharkTTY独自の画面キーボードであるフロートを切り替えます。フローティングキーボードは細長い一列ではなく、本物のキーボードのような配列を持つ完全なキーボードです。記号、Tab、Return、⌃⌥⌘の修飾キー、fnキーとFキーの列を備え、Returnは2行にまたがるL字型です。好きな位置へドラッグでき、サイズを変えられ、設定ポップオーバーの不透明度スライダーでターミナルの上に薄く重ねられます——透けて見えるのが嫌なら、完全な不透明まで上げられます。
同じ設定の中の配置では、アメリカ英語、イギリス英語、日本語(JIS)、フランス語(AZERTY)、ドイツ語(QWERTZ)、スペイン語に対応します。キーの上の候補バーは、入力に応じてありそうな単語やよく使うコマンドを提案します。上部バーのマイクボタンには2つの動作があります。タップすると音声パネルに切り替わり、長押しするとそのまま話しかけて候補バーへ入力できます。
マウスレポートは、トラックパッドの操作をどちらに渡すかを決めます。オンにすると、接続したトラックパッドやマウスのクリックとドラッグは、それを理解するプログラム——vim、tmux、htop、less——へ送られます。オフにすると、ポインタは代わりにテキストを選択します。違いが出るのは、プログラムが実際にマウス対応を有効にしているあいだだけです。iPadでは、外付けキーボードとトラックパッドが全体を通して使えます。
マイクを長押しして話します。認識は端末上で動きます——無料、オフライン、待ち時間なしで、どこにも何も送られません。聞き取った内容は編集可能なテキストとして音声パネルに現れ、挿入でターミナルに打ち込まれます。
録音はセグメントとして保持されるので、全部を言い直す代わりに、ひとつを切り取ってその部分だけ再認識できます。履歴には過去の録音が残り、試聴やもう一度の認識に使えます。iPadでは、音声パネルは透明キーボードと同じように浮かび、拡大縮小できます。
AIは任意の機能で、認識とは切り離されています。設定で自分のキーを使ってプロバイダを追加し——OpenAI、Claude、Gemini、Kimi、GLMのAPI形式に対応しています——チャットモデルを設定します。そのプロバイダに文字起こしモデルがあれば、それも設定できます。Claudeはチャット専用で音声APIを持たないため、録音はオンデバイスの認識にフォールバックします。プロバイダのキーはこの端末のKeychainにとどまり、同期されることはありません。
プロバイダをつなぐと、プロンプトモードが話した内容を整ったテキストやそのまま実行できるコマンドに書き直し、ターミナルの文脈を添付をオンにすればモデルが画面の内容を見てから答えます。チャットパネルはセッションの隣に対話を置くので、その場を離れずに質問できます。
自分でキーを用意したくない場合は、SharkTTYアカウントにサインインすれば公式のクラウドモデルを使えます。支払いはポイントで行い、アプリ内課金で購入したポイントは端末間で共有されます。どちらを選んでも、オンデバイスの認識は無料のままです。
サーバーにファイルを送る方法は2つあり、それぞれ向いている場面が違います。
設定のファイルタブでは、端末から見えるストレージをドライブとして登録できます。iCloud Drive、共有フォルダ、アプリ内のローカルフォルダ、あるいはURLで指定したWebDAVサーバーです。登録したドライブは同じファイルマネージャで閲覧でき、NASからサーバーへ、間にノートパソコンを挟まずにファイルを移せます。
接続は名前を変えられるタブとして開きます。すべての接続をタイル表示にすると並べて表示され、左右に分割と上下に分割は2つを並べ、この接続をフォーカスはひとつを元の大きさに戻します。iPadでは、デプロイを見守るだけの状態と、デプロイの最中にログも追える状態の違いになります。
リモートデスクトップもターミナルと同じワークスペースにあるので、Macのセッションと3つのシェルがひとつのグリッドを分け合えます。
ホストエディタで踏み台ホスト (ProxyJump) を設定すると、まず踏み台に接続し、そこを経由して目的のホストへ届きます。踏み台ホストは自身に保存された鍵かパスワードで、対話なしに認証します。キーボードインタラクティブのログインを求める踏み台には、まだ対応していません。
踏み台を通るのはSSHの接続だけです。MoshのUDPとETのデータ接続は端末から対象へ直接向かうので、ネットワークの外からどちらかに頼るつもりなら、事前に確認しておく価値があります。
SharkTTYのもう半分は、Macのための本格的なリモートデスクトップです。必要なのはMac側の無料コンパニオンアプリSharkTTY Deskだけで、ポート開放もVPNもルーターの設定も一切いりません。
SharkTTY Deskは無料で、macOS 14 Sonoma以降のApple SiliconのMac(M1以降)で動きます。Macアプリのページからディスクイメージをダウンロードし、SharkTTY Deskをアプリケーションフォルダにドラッグして起動してください。Dockにアイコンは出ません。メニューバーに常駐し、そこからウインドウを開けます。
初回起動時に2つの権限が必要です。アプリのパネルからシステム設定 → プライバシーとセキュリティの該当画面へ直接移動できます。
始める前にバージョンを確認してください。SharkTTY Desk 0.9.0にはiPhoneまたはiPadのSharkTTY 1.6以降が必要で、双方向オーディオには1.7以降が必要です。まだアプリを更新できない場合は、古いSharkTTY Desk 0.5.0のビルドが1.6より前のアプリでも動作します。
iPhoneまたはiPadのSharkTTYで+をタップし、リモートデスクトップを追加を選びます。入力の方法は3通りあります。
分かりやすい名前を付けて、保存して接続をタップします。Macが誰かを受け入れる前に確認する設定になっている場合、アプリはMacの前にいる人が許可をタップするまで待ちます。
誰かがリンクであなたにMacを共有することもできます。共有されたデスクは、サインインしていれば自分に共有に表示されます。共有は閲覧専用にでき、期限を設けられ、いつでも取り消せ、同時に接続できる人数を制限でき、特定のアカウントだけに限定することもできます。
モニターが複数あるMacは、そのすべてを送ってきます。画面の配置でレイアウトを決められます——左右、上下、4分割、ピクチャ・イン・ピクチャ——さらにディスプレイの順序を並べ替えて、実際の机の上の配置に合わせられます。各ディスプレイは必要に応じてストリーミングされるので、3画面のMacもスマートフォンで扱えます。
画面をタップするとその画面の操作に切り替わり、ディスプレイを切り替えると入力とポインタの送り先も新しい画面に向き直ります。細部を見たいときはフォーカスでひとつのディスプレイを大きく表示します。調整モードでは、映像をドラッグして位置を変えたり、ピンチで拡大縮小したりできます。
いちばん手軽なのは直接タッチです。1本目の指はクリックせずにポインタを滑らせ、2本目の指がその位置でクリックします。2本指タップは右クリックです。
細かい作業には、左・中・右のボタンを備えた仮想マウスがあります。長押しでドラッグを固定でき、スクロール用のホイールジェスチャもあります。ボタンは画面下部の1枚のパネルにドッキングでき、手が置かれている側へ左右にスライドし、画面キーボードが開いているときはその上に持ち上がります。
ルーペは指先の下の領域をネイティブ解像度で表示します。スマートフォンから環境設定ウインドウのチェックボックスを正確に押せるのはこのおかげです。マウスボタンをドッキングしていると、ルーペは画面の端へ逃げず、カーソルの真上に表示されます。⌘、⌥、⌃はワンショットの修飾キーとして働きます。まず修飾キーを押し、それから適用したいキーを押してください。
モード選択の付いたキーボードボタンひとつで、SharkTTYのフローティングキーボードと、ショートカットのツールバーを備えたシステムキーボードを切り替えられます。フローティングキーボードには、macOSが前提としiOSにはない修飾キーとFキーが揃っています。
クイック操作のメニューからは、入力しづらいショートカットを送れます。Spotlight検索、Mission Control、アプリケーションウインドウ、アプリの切り替え。左にタイル、右にタイル、画面を埋める、中央に配置、しまう、アプリを隠す。ウインドウを閉じる、アプリを終了、強制終了。範囲指定と全画面のスクリーンショット。そして画面をロック。クリップボードは双方向で同期するので、Macでコピーしてスマートフォンで貼り付けられます。
映像はScreenCaptureKitで取り込み、ハードウェアでエンコードしたH.264です。段階を選ぶのはクライアント側で、xHDはMacのネイティブピクセルをそのまま描画し、高画質と標準は精細さと帯域を引き換えにし、なめらかは何よりフレームレートを優先します。
弱い回線で自動的に下げるをオンのままにしておけば、ネットワークが細ったときにセッションが自ら段階を下げ、途切れ途切れになる代わりにそこで踏みとどまります。Macと同じWi-Fiにいるなら、たいていxHDで問題ありません。
リモート音声はMacのシステムサウンドを端末に届けるので、Mac側の動画や通話の音が手元で聞こえます。マイク入力は逆向きで、iPhoneやiPadをMacのマイクにします。その場にいないあいだにMacで行う通話、録音、音声入力がこれで賄えます。
どちらの方向も、端末側にSharkTTY 1.7以降が必要です。音声そのものはOpusで運ばれます。
仮想ディスプレイはまだベータですが、iPadのサイズに合わせた追加のヘッドレス画面を作れます。モニターのないMac miniへの答えであり、持ち歩く2つ目の作業スペースにもなります。
Deskはスリープ中のMacをネットワーク越しに起こし、接続しているあいだは起きたままに保てます。許可すれば、macOSのログインウインドウを表示して、再起動後のマシンにパスワードを入力しリモートでロック解除することもできます。
両端がどちらも外向きに接続するので、ルーターでポートを開ける必要はありません。違うのは、両者が出会う経路です。
セッションはエンドツーエンドで暗号化され、中継サーバーは暗号文を転送するだけです。ローカルネットワークでは複数のiPhoneやiPadから同じMacを同時に表示・操作でき、Macは新しいビューアごとに承認を求めるように設定でき、タップで誰でも切断できます。
他人のサーバーに触れたくないなら、中継サーバーはオープンソースです。公開されたどのマシンでもdesk-relayを動かせます。--bindに渡したアドレスでQUICを待ち受け、--wss-bindでWebSocketのフォールバックを提供し、リンクの作成はあなたが決めた共有シークレットで守られます。SharkTTY Deskにそのアドレスを設定し、表示された中継リンクをスキャンすれば、通信が通る相手はあなただけです。SharkTTYアカウントは関係しません。
サーバーにmoshが入っていないか、非対話のSSHログインが受け取るPATHに入っていないかのどちらかです。moshをインストールするか、設定 → ホストでそのホストのmosh-serverの絶対パスを指定してください——たいていのLinuxマシンでは /usr/bin/mosh-server、Apple SiliconのMacでは /opt/homebrew/bin/mosh-server です。
リモート側にetterminalがないか、非対話のSSHセッションのPATHに入っていません。そちらにEternal Terminalをインストールし(apt install et、brew install et)、etserverが動いていること、そのポート——変更していなければ2022——がファイアウォールで塞がれていないことを確認してから、もう一度お試しください。そのあいだもSSHとMoshは使えます。
これはチェックが仕事をしている状態です。正当な原因はサーバーの作り直しや鍵の更新で、正当でない原因は誰かが間に入っていることです。新しい鍵を信頼して再接続をタップする前に、どちらなのかを確かめてください。自分でマシンを作り直したのなら、ホストエディタで記録したホスト鍵を消去し、新しいフィンガープリントを意識して確認しましょう。
制限が2つあります。ファイルは64 MBまでで、アプリが再利用できる認証情報がホストに必要です——ワンタイムコードでしかログインできないサーバーはアップロードに使えません。それより大きなファイルや面倒な条件のときは、SFTPのファイルマネージャか、登録したドライブをお使いください。
SharkTTY Deskがインストールされているだけでなく、実際に起動しているかを確認してください。Macがスリープしている可能性があるなら、Deskでネットワーク越しの起動を有効にします。ネットワークをまたぐ場合、アプリが直接の経路を試してから中継サーバーへ切り替えるまで、接続に数秒かかることがあります。
真っ黒な映像はほぼ確実に画面収録が許可されていないことを意味し、反応しない映像はアクセシビリティが許可されていないか、操作を許可がオフになっていることを意味します。どちらもMacのシステム設定 → プライバシーとセキュリティにあり、Deskからその画面へ直接移動できます。
バージョンを確認してください。SharkTTY Desk 0.9.0には、スマートフォンまたはタブレット側にSharkTTY 1.6以降が必要です。App Storeで更新するか、古いバージョンのアプリで動作する以前のSharkTTY Desk 0.5.0のビルドをインストールしてください。
必要なものには何もかかりません。アプリ、Macのコンパニオン、オンデバイスの音声認識、そして上に挙げたすべての機能は無料で、自分のサーバーへの接続にアカウントは要りません。公式のクラウドAIモデルはポイントで支払いますが、自分のプロバイダのキーを使えば費用はかかりません。チップは任意で、1回限りでも毎月でも選べ、何かの機能が解放されることはありません——毎月のチップは、Appleアカウントの設定で解約するまで自動更新されます。
SharkTTYはApp Storeで無料、Mac版のSharkTTY Deskも無料でダウンロードできます。
Mac側の詳しい情報は SharkTTY Deskのページ にあります。質問へのいちばん早い答えは フィードバックボード.