// ホストの追加

ホスト画面の + ボタンをタップして新しいサーバーを追加します。

必須フィールド

  • ホスト名 / IP — サーバーアドレスまたはIPアドレス。IPv4とIPv6の両方をサポート。
  • ポート — デフォルトは22。サーバーが別のポートでSSHを動かしている場合は変更してください。
  • ユーザー名 — ログインするUnixユーザー(例:ubunturootdeploy)。
  • 認証方式 — パスワードまたはSSH鍵(推奨)から選択。

ホスト鍵フィンガープリントの確認

初回接続時にSSHBorgはサーバーのフィンガープリントを表示し、承認を求めます。これはセキュリティチェックです。接続先が正しいサーバーであり、なりすましでないことを確認します。承認前に、サーバー管理者から提供されたか信頼できる手段で確認したフィンガープリントと一致するかを確かめてください。

承認後、フィンガープリントはローカルに保存されます。将来の接続でフィンガープリントが変わった場合、SSHBorgは警告を表示します。これはサーバーの再構築、鍵のローテーション、または中間者攻撃を示している可能性があります。

// ヒント
サーバーのフィンガープリントはいつでも以下のコマンドで確認できます:
ssh-keygen -lf /etc/ssh/ssh_host_ed25519_key.pub

// SFTPファイルマネージャー

SFTPファイルマネージャーを使うと、スマートフォンからサーバー上のファイルを直接参照、アップロード、ダウンロード、リネーム、削除できます。ホスト画面で SFTP をタップしてSFTPセッションを開きます。

ナビゲーション

フォルダをタップして開きます。戻る矢印またはパスバーの任意のセグメントをタップしてディレクトリツリーを上に移動します。

シンボリックリンクは小さなリンクアイコンバッジで表示されます。シンボリックリンクをタップするとターゲットに移動します。ディレクトリを指す場合は中に入り、ファイルを指す場合は通常のファイルと同様に動作します。

ファイルのアップロード

アップロードボタン(↑)をタップして、スマートフォンのストレージから1つ以上のファイルを選択します。アップロードはすぐに開始され、進行状況が画面上部に表示されます。

ファイルとフォルダのダウンロード

ファイルをタップするとすぐにダウンロードされます。フォルダ全体をダウンロードするには、その横にある ダウンロードアイコンをタップします。SSHBorgはディレクトリツリー全体をダウンロードし、スマートフォンの Downloads フォルダに保存します。

保存先に同名ファイルが既に存在する場合、ダイアログで 上書き、ファイルの スキップ、または転送全体の キャンセル を選択できます。

// シンボリックリンクについて
フォルダのダウンロード中、ディレクトリを指すシンボリックリンクはスキップされます。ダウンロードされるのは通常ファイル(ファイルを指すシンボリックリンクを含む)のみです。これにより意図しない再帰的ダウンロードを防ぎます。

複数選択と一括操作

任意の項目を長押しして選択モードに入り、追加の項目をタップして選択を増やします。ツールバーに現在の選択に対する操作が表示されます:

  • ダウンロード — 選択したすべてのファイルとフォルダを一括ダウンロード。進行ダイアログとキャンセルをサポート。
  • 削除 — 選択したすべての項目を削除。空でないフォルダを削除するとすべての内容が再帰的に削除されます。元に戻す方法はありません。

// SSH鍵

鍵ベースの認証はパスワードよりも安全で、設定後は何も覚えたり入力したりする必要がありません。

鍵の生成

設定 → SSH鍵 → 新しい鍵を生成 に進みます。SSHBorgは以下をサポートします:

  • Ed25519 — 推奨。高速、コンパクト、安全。
  • ECDSA(P-256 / P-384) — 古いサーバーとの互換性が良好。
  • RSA(2048 / 4096ビット) — 最大の互換性だが低速。

後で識別しやすいよう、意味のある名前(例:my-vpswork-server)を付けてください。

// セキュリティについて
SSHBorgは意図的に秘密鍵のエクスポートを許可しません。鍵はデバイスから外に出ません。別のデバイスで同じ鍵が必要な場合は、そのデバイスで新しい鍵を生成し、サーバーに別途登録してください。これがより安全なアプローチです。

サーバーへの鍵の登録

鍵を生成したら、タップして 公開鍵 を表示します。コピーして、ログインしたいユーザーのサーバー上の ~/.ssh/authorized_keys ファイルに貼り付けます。

  1. スマートフォンで、SSHBorg → 設定 → SSH鍵 → 鍵をタップ → 公開鍵をコピー。
  2. サーバーにログイン(パスワードまたは既存の鍵で)。
  3. 公開鍵を認証済み鍵ファイルに追記:
    mkdir -p ~/.ssh
    chmod 700 ~/.ssh
    echo "ssh-ed25519 AAAA...コピーした鍵..." >> ~/.ssh/authorized_keys
    chmod 600 ~/.ssh/authorized_keys
  4. SSHBorgで接続を試みます。パスワードなしでログインできるはずです。
// サーバー要件
サーバーの /etc/ssh/sshd_configPubkeyAuthentication yes があることを確認してください。ほとんどのディストリビューションではデフォルトで有効ですが、一部のセキュア強化イメージでは無効になっている場合があります。

鍵の追加暗号化

SSHBorgはオプションで 追加パスフレーズ を提供しています(設定 → SSH鍵 → 鍵をタップ → 暗号化を有効にする)。有効にすると、鍵はSSHBorgが保存しないパスフレーズで暗号化され、鍵を使用するたびに入力が求められます。

スマートフォンに機密サーバー認証情報を保存している場合、または生体認証ロックを無効にしている場合は、強くお勧めします。

// コマンド候補

端末で入力中、SSHBorgはキーボードの上に候補バーを表示します。候補は接続したユーザーのシェル履歴から取得されます。

仕組み

端末セッションが開かれると、SSHBorgはリモートサーバーからシェル履歴ファイルを読み込みます。以下の場所を順に試みます:

  1. ~/.bash_history — Bashシェルのデフォルト
  2. ~/.zsh_history — Zshのデフォルト($HISTFILEが設定されている場合も確認)
  3. ~/.local/share/fish/fish_history — Fishシェルユーザー向け

存在して読み取り可能な最初のファイルが使用されます。入力するとコマンドがリアルタイムでフィルタリングされ、候補バーにチップとして表示されます。チップをタップするとコマンドが挿入されます。

トラブルシューティング

候補が表示されない

  • 履歴ファイルがまだ存在しない可能性があります(初回ログイン、またはシェルが履歴を保存するよう設定されていない)。
  • シェルが履歴を書き込むよう設定されていることを確認してください。Bashの場合、~/.bashrc に追加:
    HISTFILE=~/.bash_history
    HISTSIZE=10000
    HISTFILESIZE=20000
  • Zshの場合、~/.zshrc に追加:
    HISTFILE=~/.zsh_history
    HISTSIZE=10000
    SAVEHIST=10000
    setopt APPEND_HISTORY SHARE_HISTORY

候補が別のユーザーのものになる

// 既知の制限
あるユーザーで接続した後に sudo su - root(または su で別のユーザーに切り替え)を実行した場合、候補バーは root ではなく元のログインユーザーの履歴を表示し続けます。これは、SSHBorgがシェル起動前に接続時の認証情報を使って履歴ファイルを読み込むためです。

rootの履歴候補を取得するには、SSHBorgで直接 root としてログインするよう設定した別のホストエントリーを追加してください(サーバーが許可している場合)。

// 端末ジェスチャー

端末はタイピング以外にも、いくつかのタッチジェスチャーに対応しています:

  • 履歴のスクロール — 上下にスワイプして端末のスクロールバックバッファを参照。
  • ズーム — ピンチ操作でフォントサイズを拡大・縮小。
  • テキストのコピー — 端末の任意の場所を長押しして選択モードに入ります。ハンドルをドラッグして選択範囲を調整し、選択をコピー でハイライトされたテキストのみコピー、または すべてコピー で全出力をコピー。他の場所をタップするとキャンセル。
  • 貼り付け — キーボードが開いているときに表示される追加キーバーの 貼り付け ボタンを使用。

// エージェント転送

SSHエージェント転送を使うと、SSHBorgに保存された鍵を、リモートサーバー内部から行われるさらなる接続の認証に使用できます。例えば、プライベートリポジトリの git clone や、2台目のサーバーへのホップなどです。

SSHBorgでの転送の有効化

ホストを追加または編集する際に、エージェント転送トグルを有効にします。SSHBorgはそのセッションのSSHエージェントとして機能します。

サーバー側の設定

サーバーはエージェント転送を許可している必要があります。/etc/ssh/sshd_config を確認:

AllowAgentForwarding yes

ほとんどのシステムではデフォルトです。変更後はSSHデーモンを再起動:

sudo systemctl restart sshd

ホストごとのクライアント設定(オプション)

ラップトップやデスクトップからもこのサーバーに接続する場合、ローカルの ~/.ssh/config で永続的に転送を設定できます:

Host myserver
    HostName 203.0.113.42
    User ubuntu
    ForwardAgent yes
// セキュリティについて
エージェント転送はリモートサーバーにSSHエージェントソケットへの一時的なアクセスを与えます。セッションがアクティブな間、そのサーバーのrootユーザー(または侵害されたプロセス)があなたの鍵を使って他の場所に接続できる可能性があります。信頼できるサーバーでのみ転送を有効にしてください。

// 接続が切れる場合とターミナルマルチプレクサー

SSHはスマートフォンとサーバー間のリアルタイムTCP接続です。接続が中断されると、たとえ一瞬でも、セッションとその中で実行されているすべてが失われます。

モバイルで接続が切れる理由

モバイルネットワークは特に接続が切れやすく、理由は以下の通りです:

  • IPアドレスの変更 — 移動中や基地局の切り替え時に、キャリアが新しいパブリックIPを割り当てる場合があります。TCP接続はIPアドレスに紐付いているため、既存のSSHセッションは直ちに無効になります。
  • Wi-Fi ↔ モバイルデータの切り替え — Wi-FiとモバイルデータネットワークのIPが変わり、開いているTCP接続がすべて切断されます。
  • アイドルタイムアウト — キャリアやNATルーターは数分後にアイドル接続を切断することがよくあります。長時間実行されているが無音のセッション(ログ監視、入力待ち)がこれに脆弱です。
  • 電波の喪失 — トンネル、地下駐車場、または単に弱い電波でも一時的にネットワークが切断され、セッションが終了するのに十分です。
// 重要
SSH端末で長時間コマンド(ビルド、バックアップ、データベースマイグレーション)を直接実行中に接続が切れると、コマンドは即座に強制終了されます。部分的な作業が不整合な状態になる可能性があります。

解決策:tmuxまたはscreen

ターミナルマルチプレクサーはサーバー上で永続的なセッションを実行し、SSH接続から完全に独立しています。接続が切れても、セッションとその中で実行されているすべてが継続されます。再接続したとき、セッションに再アタッチすると、すべてがそのままになっています。

これはスマートフォンからサーバーを管理する上で最も有用な習慣です。

tmuxクイックスタート

tmuxはほとんどの最新Linuxディストリビューションで利用可能で、推奨の選択肢です。

# 新しい名前付きセッションを開始
tmux new -s work

# セッションからデタッチ(実行を継続)
Ctrl+B、その後 D

# 実行中のセッションを一覧表示
tmux ls

# セッションに再アタッチ
tmux attach -t work

# 最新のセッションに再アタッチ
tmux attach

screenクイックスタート

screenは古いですが、tmuxがインストールされていない可能性がある最小サーバーイメージを含む、ほぼすべてのUnixシステムで利用できます。

# 新しい名前付きセッションを開始
screen -S work

# セッションからデタッチ
Ctrl+A、その後 D

# 実行中のセッションを一覧表示
screen -ls

# セッションに再アタッチ
screen -r work

モバイルでの推奨ワークフロー

  1. SSHBorgでサーバーに接続。
  2. すぐにtmux/screenセッションを開始または再アタッチ:tmux attach || tmux new -s main
  3. マルチプレクサー内でコマンドを実行。
  4. 接続が切れても、再接続するだけ — セッションはまだそこにあります。
// ヒント
サーバーの ~/.bashrc または ~/.zshrctmux attach || tmux new -s main を追加すると、SSHBorgでログインするたびにマルチプレクサーセッションが自動的に開始されます。

// 踏み台ホスト

踏み台ホスト(踏み台サーバーとも呼ばれます)は、インターネットから直接アクセスできないターゲットサーバーに到達するために経由する中間サーバーです。SSHBorgはシングルおよびマルチホップチェーンをネイティブにサポートしています。

SSHBorgでの踏み台ホストの設定

  1. 踏み台サーバーをSSHBorgに通常のホストとして追加します(例:bastion)。
  2. ターゲットサーバーを別のホストとして追加します。
  3. ターゲットホストの設定で、踏み台ホストを作成した踏み台に設定します。
  4. 踏み台エントリーでエージェント転送を有効にします。これにより鍵が踏み台を通してターゲットサーバーへの認証に転送されます。
// 仕組み
SSHBorgはまず踏み台へのSSH接続を確立し、次にそれを通してターゲットサーバーへの転送TCPチャンネルを開きます。秘密鍵はスマートフォンから外に出ません — 踏み台は暗号化されたストリームをプロキシするだけです。

マルチホップチェーン

複数の中間サーバーを経由する必要がある場合(例:インターネット → 踏み台 → DMZ → ターゲット)、各ホップのエントリーを作成してチェーンします:

  • bastion — 踏み台なし、エージェント転送オン
  • dmz — 踏み台 = bastion、エージェント転送オン
  • target — 踏み台 = dmz
// 重要
エージェント転送は最初のホップだけでなく、すべての中間ホップで有効にする必要があります。これなしでは認証チェーンが壊れ、最終サーバーへの接続が「permission denied」エラーで失敗します。

同等の手動設定(参考)

デスクトップの ~/.ssh/config での同等の設定は次のようになります:

Host bastion
    HostName bastion.example.com
    User admin
    ForwardAgent yes

Host target
    HostName 10.0.1.50
    User ubuntu
    ProxyJump bastion
    ForwardAgent yes

この設定で、ラップトップからの ssh target は透過的に踏み台を経由します。

ファイアウォール要件

  • スマートフォンはSSHポート(通常22)で踏み台に到達できる必要があります。
  • 踏み台はSSHポートでターゲットに到達できる必要があります。
  • ターゲットはスマートフォンから直接到達できる必要はありません

// 複数セッション

SSHBorgでは、異なるサーバーへのものも含め、複数のSSH端末セッションとSFTPファイルマネージャーセッションを同時に開いておくことができます。

  • ホスト画面で 端末 または SFTP をタップしてセッションを開きます。
  • 画面上部のセッションセレクターを使って、開いているセッション間を切り替えます。
  • ネットワーク接続が保たれている限り、セッションはバックグラウンドで生き続けます。
  • ホストリストでは、各ホストの隣にアクティブなSSHおよびSFTPセッション数の小さなバッジが表示されるので、一目で開いているものを確認できます。
// ヒント
長時間実行コマンド(ビルド、バックアップ、ログ監視)は別のセッションに切り替えても実行し続けます。SSH接続が切れても継続させたい場合は、サーバー側で tmux または screen を使用してください。

// アプリのセキュリティ

生体認証ロック

設定 → セキュリティ → 生体認証ロック で有効にします。有効にすると、SSHBorgはホスト、認証情報、セッションデータを表示する前に指紋または顔認証を要求します。

非アクティブタイムアウトを設定できます。バックグラウンドでその時間が経過すると、アプリは自動的にロックされます。

スクリーンショット保護

SSHBorgはデフォルトでスクリーンショットと画面録画をブロックし、機密性の高い端末内容が最近使ったアプリの画面やスクリーンキャプチャツールから漏れないようにします。

スクリーンショットが必要な場合(例:端末出力の共有)は、設定 → セキュリティ → スクリーンショットを許可 で一時的に無効にできます。

認証情報の保存

すべての認証情報(パスワード、秘密鍵、パスフレーズ)は Android Keystore(Android 10+で利用可能なハードウェアバックアップされたセキュアエンクレーブ)を使用して暗号化して保存されます。外部ストレージへの書き込みや、どこかへの送信は一切行われません。

// バックアップについて
鍵はAndroid Keystoreに保存されているため、Androidのクラウドバックアップ機能でバックアップできず、新しいスマートフォンに自動的に転送されません。デバイスを切り替える前に、新しいデバイスで生成した新しい鍵をすべてのサーバーに登録してください。