このページはCalíope 1.7を紹介しています。私がいま作っているバージョンです。1.6は、Mac、iPad、iPhone、Apple Watch、Apple TV、Apple Vision Pro向けにApp Storeで公開中です。それぞれの機能がどのバージョンで入ったかは変更履歴に書いてあります。

すべてのトピックに「Calíopeで開く」ボタンを追加します。アプリがインストールされている場合にのみ機能します。

SSHトンネル

SSHトンネルとは?

ポートを公開せずに、SSH踏み台の向こうにあるデータベースサーバに接続します。

場所: サイドバー › プロファイルのフォーム ›「SSHトンネル」

SSHトンネル(ポートフォワーディングとも呼ばれます)を使うと、Calíopeは、自分のネットワークから直接アクセスできないデータベースサーバと通信できます。Calíopeはサーバのホストに直接接続するのではなく、まず踏み台サーバとSSHセッションを開き、そのセッションを通して内部のサーバへの暗号化されたチャネルを作ります。

典型的な使い方:データベースはAWS、GCP、DigitalOceanのプライベートネットワークの10.0.1.5:3306にあり、インターネットからアクセスできるのは踏み台サーバのbastion.company.com:22だけ、という場合です。Calíopeは接続するときにトンネルを自動で開き、接続を解除するときに閉じます。

データベースへの接続は、トンネルがない場合とまったく同じように動作します。トンネルはほかのすべてのツールから完全に透過的です。

キーワード: SSH、トンネル、踏み台、ポートフォワーディング、プライベートネットワーク、VPC、AWS、GCP

SSHトンネルを設定する

接続プロファイルでトンネルを有効にし、踏み台の情報を入力します。

場所: サイドバー › プロファイルのフォーム ›「SSHトンネル」

接続マネージャでプロファイルを選び、「サーバオプション」セクションの「SSHトンネル」スイッチをオンにします。設定セクションが表示され、次の項目があります:

- 「SSHホスト」:踏み台サーバのホスト名またはIP(例:bastion.company.com)
- 「SSHポート」:通常は22
- 「SSHユーザ名」:踏み台で認証するユーザ(例:ubuntu、ec2-user)
- 「SSH認証方式」:「パスワード」か「秘密鍵」を選びます

プロファイル本体の「ホスト / IP」と「ポート」の欄は、引き続きデータベースの接続先で、自分のマシンからではなく*踏み台から見た*ものです。データベースサーバが踏み台と同じマシンにある場合は、127.0.0.1を使います。

接続する前にトンネル全体を確かめるには、「接続をテスト」をタップします。

キーワード: SSHの設定、SSHホスト、SSHポート、SSHユーザ、踏み台、踏み台ホスト

SSHのパスワード認証

踏み台のユーザ名とパスワードでトンネルを認証します。

場所: サイドバー › プロファイルのフォーム ›「SSHトンネル」›「認証」

SSHトンネルセクションの認証の選択肢で「パスワード」を選びます。「SSHパスワード」欄が表示されるので、踏み台サーバでのユーザのパスワードを入力します。

パスワードはデバイスのシステムのキーチェーンに保存され、プロファイルのファイルには決して保存されません。内部キーssh-pass-<profile-id>で保存され、Calíopeだけがアクセスできます。

この方法がいちばん簡単ですが、最近のサーバの多くは、暗号鍵を使うためにパスワード認証を無効にしていることに注意してください。

キーワード: SSHパスワード、パスワード認証、SSH認証、キーチェーン

SSHの秘密鍵認証

ED25519またはECDSAの鍵を、パスフレーズの有無にかかわらず使ってトンネルを認証します。

場所: サイドバー › プロファイルのフォーム ›「SSHトンネル」›「秘密鍵」

認証の選択肢で「秘密鍵」を選びます。鍵ファイルを選ぶための「選択」ボタンが表示されます。

Macでは、Calíopeはファイルへの安全なアクセス(セキュリティスコープ付きブックマーク)を保持するので、次回以降の起動でもう一度選ばなくても読み込めます。⚠️ 鍵ファイルを移動したり名前を変えたりすると、Calíopeは次の接続でそれを読み込めず、「SSHキーファイルにアクセスできなくなりました」というエラーを表示します。プロファイルを開いて、新しい場所からファイルを選んでください。

Mac以外では、鍵を選ぶか貼り付けると、このデバイスのCalíope内にそのコピーが保存されます:元のファイルを移動しても影響はなく、同期をオンにしていてもiCloudに送られることはありません。

ほかのデバイスでは、プロファイルは鍵なしで届きます:ファイルとその場所は、それを選んだデバイスに残ります。接続リストには「このデバイスでファイルを選択」と表示され、フォームには「このプロファイルは、ほかのデバイスで選択された秘密鍵を使用しています。ここで選択してください。」と表示されます:そこで選んでください。

対応する鍵の形式と種類:
- ED25519(ssh-keygen -t ed25519):推奨。安全で高速です
- ECDSA P-256/P-384/P-521(ssh-keygen -t ecdsa -b 256/384/521)

鍵はネイティブのOpenSSH形式(ヘッダが-----BEGIN OPENSSH PRIVATE KEY-----)である必要があります。これはOpenSSH 7.8以降のssh-keygenのデフォルトの形式です。

パスフレーズで保護された鍵も使えます。プロファイルにパスフレーズを入力すると、Calíopeが自分で鍵を復号します(bcrypt-pbkdf + AES-256)。Mac、iPad、iPhoneのどれでも同じで、復号した鍵がディスクに書かれることはありません。パスフレーズが間違っていればそう伝えます:読み込めないファイルと取り違えることはありません。

⚠️ RSA鍵には対応していません(使っているSSHライブラリの制限)。踏み台がRSAしか受け付けない場合は、パスワード認証を使うか、新しいED25519鍵を作ってその公開鍵を踏み台に追加してください。

新しいED25519鍵を作るには:

ssh-keygen -t ed25519 -C "caliope@my-mac"

公開鍵(~/.ssh/id_ed25519.pub)を踏み台の~/.ssh/authorized_keysにコピーします。

キーワード: 秘密鍵、ED25519、ECDSA、OpenSSH、SSH-KEYGEN、authorized_keys、パスフレーズ、RSA

SSHトンネルで接続をテストする

「接続をテスト」ボタンが、SSHトンネルとデータベースの認証を最初から最後まで確かめます。

場所: 接続マネージャ › 接続をテスト

SSHトンネルを有効にしたプロファイルで「接続をテスト」をタップすると、Calíopeは一連の手順をすべて実行します:

1. SSH踏み台へのTCP接続を開きます(SSHホスト : SSHポート)
2. SSHプロトコルをネゴシエートし、設定した資格情報で認証します
3. 踏み台からデータベースのホストへのdirect-tcpipチャネルを開きます
4. 127.0.0.1の一時ポートでローカルプロキシを起動します
5. エンジンのドライバでそのローカルポートに接続し、サーバに実際のものを問い合わせます:データベースのリスト(RedisではPING)
6. テストが終わるとトンネルを閉じます

テストが成功すると、エンジンと到達したアドレスが書かれた緑のバナーが表示されます。失敗すると、エラーメッセージが、どの手順で問題が起きたか(SSH認証、データベースのホストに到達できない、データベースの資格情報が正しくない、など)を示します。

キーワード: SSHをテスト、トンネルをテスト、トンネルを確認、SSH接続をテスト、緑のバナー

SSHサーバのホスト鍵の検証

Calíopeは、中間者(MITM)攻撃から守るために、SSHサーバのフィンガープリントを検証します。

場所: 接続マネージャ › SSH鍵のアラート

CalíopeがはじめてSSHサーバに接続するとき、その公開鍵のSHA256フィンガープリントを表示し、続ける前に確認を求めます。この動作はOpenSSHのStrictHostKeyChecking=askと同じです。

最初の接続:
Calíopeはフィンガープリントを表示し、想定しているサーバと一致するか確認するよう求めます。受け入れるには「信頼して接続」をタップします。フィンガープリントはデバイスのキーチェーンに保存されます。

2回目以降の接続:
サーバのフィンガープリントが保存したものと一致すれば、接続はそのまま進みます。

鍵が変わった場合:
Calíopeは赤い警告を表示します:サーバの鍵が変わりました。これは次のことを示している可能性があります:
- 管理者が鍵を作り直した(再インストールや移行の後によくあります)。
- 信頼できないネットワークでの中間者(MITM)攻撃の可能性。

「更新して接続」をタップする前に、管理者に確認してください。

保存した鍵を消去する:
Macでは、検証をやり直させるには、「キーチェーンアクセス」Appでcaliope.ssh.hostkeyを検索し、キーチェーンからフィンガープリントを削除します。iPad、iPhone、Apple Vision Proにはそのためのアプリがありません:鍵が変わったときに「更新して接続」をタップすると、フィンガープリントが置き換わります。

キーワード: SSH、ホスト鍵、フィンガープリント、MITM、検証、サーバの鍵、既知のホスト、SSHのセキュリティ、SHA256

SSHトンネルのトラブルシューティング

SSHトンネルのよくあるエラーとその解決方法。

踏み台への接続でConnection refused
SSHのホストとポート(デフォルトは22)が正しいこと、そして踏み台のファイアウォールがそのポートへの着信接続を許可していることを確かめてください。

Authentication failed、または踏み台から応答がない
パスワードの場合:SSHのユーザ名とパスワードを確認してください。秘密鍵の場合:対応する公開鍵が踏み台の~/.ssh/authorized_keysにあること、そしてサーバが公開鍵認証を許可していること(/etc/ssh/sshd_configのPubkeyAuthentication yes)を確かめてください。

「SSH秘密鍵のパスフレーズが正しくありません」
鍵は読み込めましたが、パスフレーズで復号できませんでした。プロファイルの「パスフレーズ」欄を確認してください。これはSSHユーザのパスワードでも、データベースのパスワードでもありません。

「対応していないSSHキーの種類です:ssh-rsa」
RSA鍵には互換性がありません。ED25519鍵を作り、その公開鍵を踏み台に追加してください。

「SSHキーファイルの形式が正しくありません」
鍵はネイティブのOpenSSH形式である必要があります。次のコマンドで変換します:ssh-keygen -p -m OpenSSH -f your_key

踏み台からサーバに到達できない
プロファイルの「ホスト」欄は、*踏み台から見た*データベースのホストでなければなりません。データベースサーバが踏み台と同じマシンにある場合は127.0.0.1を、同じネットワークの別のマシンにある場合はプライベートIP(例:10.0.1.5)を試してください。

トンネルは動くが、サーバが接続を拒否する
データベースの資格情報(ユーザ名/パスワード)は、SSHの資格情報とは別のものです。データベースのユーザに、127.0.0.1または踏み台のIPから接続する権限があることを確かめてください。

キーワード: SSHエラー、トラブルシューティング、接続拒否、認証失敗、無効な形式、RSA非対応、パスフレーズ

SSHホスト鍵の検証(既知のホスト)

CalíopeがSSHサーバの身元をどう認証するか、そして新しい/変更されたフィンガープリントのダイアログが表示されたときにどうするか。

はじめてSSHサーバに接続するとき、Calíopeはまだその公開鍵を知りません。トンネルを完成させる前に、Appは鍵のSHA-256フィンガープリントを表示するので、それを確かめて信頼するかどうかを決められます。

このダイアログは、接続するときだけでなく、トンネルを開くあらゆる操作で表示されます:接続のテストやプロファイルのデータベースの読み込みでも同じように確認を求め、そこで受け入れても同じようにフィンガープリントが保存されます。

フィンガープリントの形式
- Calíopeはssh-keygen -l -E sha256とまったく同じようにフィンガープリントを計算し、SHA256:<base64-no-padding>の形式を使います。
- サーバでは、次のコマンドで同じフィンガープリントを得られます:ssh-keygen -l -f /etc/ssh/ssh_host_ed25519_key.pub -E sha256。

「不明なSSHホストキー」ダイアログ(新しいフィンガープリント)
- オレンジ色の、斜線の入った盾のアイコン。
- host:portと受け取ったフィンガープリントを表示します。
- 「信頼して接続」:識別子caliope.ssh.hostkey.<host>:<port>でシステムのキーチェーンにフィンガープリントを保存し、トンネルを続けます。
- 「キャンセル」:何も保存せずに接続を中止します。

「SSHホストキーが変更されました」ダイアログ(赤い警告)
- 赤い、感嘆符の入った盾のアイコン。
- 受け取ったフィンガープリントが、以前に保存したものと一致しないときに表示されます。次のことを示している可能性があります:
- 管理者がサーバの鍵を入れ替えた(正当な場合)。
- 同じIP/ポートで別のサーバが応答している(MITM攻撃の可能性)。
- 両方のフィンガープリント、つまり既知のものと新しいものを並べて表示します。
- 「更新して接続」:保存されているフィンガープリントを上書きして接続します。別の経路で鍵の入れ替えを確認してから使ってください。
- 「キャンセル」:以前のフィンガープリントを残して中止します。

確認を求められない画面
- モニタ、トポロジ、スケジュールされたレポート、再接続には、判断するためのダイアログがありません。サーバがまだ信頼済みのものに含まれていなければ、「不明なSSHサーバ」で止まります。「フィンガープリントが変わった」ではありません。それは、保存したものと異なるフィンガープリントのためのものです。
- 解決するには、確認を求める画面(プロファイルのフォームの「接続をテスト」)から一度接続を開き、確かめたうえでフィンガープリントを信頼してください。

既知のフィンガープリントをリセットする
- 現在、個々のフィンガープリントを削除するUIはありませんが、キーチェーンからその項目(「キーチェーンアクセス」›アカウントcaliope.ssh.hostkey.host:port)を削除して再接続すると、検証をやり直させることができます。

ベストプラクティス
- フィンガープリントを、サーバの管理者が安全な経路(署名付きのメッセージ、HTTPSのサイトなど)で送ってきたものと比べてください。
- はっきりした理由もなく赤いダイアログが表示されたら、キャンセルして、受け入れる前に管理者に確認してください。

キーワード: SSH、フィンガープリント、既知のホスト、SHA256、信頼、MITM、セキュリティ、変更されたフィンガープリント、フィンガープリントの更新、キーチェーン、ED25519、ECDSA