AnyBucketがSSHの設定を使う仕組み
別途、鍵を登録する場所はありません。SFTPでは、AnyBucketはターミナルと同じプログラムである/usr/bin/sshを起動します。そのため:
~/.sshにある秘密鍵が使えます。- SSHエージェントに読み込まれた鍵が使えます。
~/.ssh/configのすべてのHostブロックが適用されます。HostName、User、IdentityFile、ProxyJumpも含まれます。- ホスト鍵は、ターミナルと共通の
~/.ssh/known_hostsと照合されます。
目安はひとつです:ターミナルでssh user@hostが使えれば、AnyBucketでも使えます。サーバがパスワードを求める場合、パスワードはログインキーチェーンに保存されます。
鍵を作成してサーバに追加する
まだ鍵がない場合は:
- ターミナルを開き、
ssh-keygen -t ed25519を実行します。returnキーを押してデフォルトのファイル~/.ssh/id_ed25519のままにし、パスフレーズを決めます。 - 公開鍵である
~/.ssh/id_ed25519.pubを、サーバの~/.ssh/authorized_keysに追加するか、サーバの管理者に送ります。.pubの付いていないファイルは、決して共有しないでください。 - テストします:
ssh user@hostで、サーバのパスワードを求められずにログインできるはずです。
毎回パスフレーズを入力しなくて済むように、ssh-addで鍵をエージェントに追加します。macOSでは、パスフレーズをキーチェーンに保存できます。
~/.ssh/configでサーバに名前を付ける
Hostブロックで、サーバに短い名前と接続のための設定を与えます:
Host staging
HostName staging.example.com
User deploy
IdentityFile ~/.ssh/id_ed25519
これで、ssh stagingを実行すると、その鍵を使ってdeployとしてログインします。AnyBucketでSFTPでサーバstagingに接続しても、同じブロックが適用されます。AnyBucketは、ターミナルと同じようにその名前をsshに渡すからです。
踏み台サーバを経由して接続する
多くのサーバには、踏み台サーバ(ジャンプホスト、バスティオン)を経由しないと接続できません。ターミナルで一時的に接続するなら、ssh -J bastion appと入力します。これを常に使うには、ProxyJumpを設定します:
Host bastion
HostName bastion.example.com
User me
Host app
HostName 10.0.1.20
User deploy
ProxyJump bastion
ターミナルでssh appを実行してテストします。ログインできたら、AnyBucketでSFTPでappに接続します。接続は自動的に踏み台サーバを経由し、アプリで追加の設定をする必要はありません。複数の踏み台を経由する場合も同じで、ProxyJumpのあとにコンマ区切りで並べます。
ホスト鍵:「まだ登録されていない」または「変わった」
サーバに初めて接続するとき、その鍵はまだ~/.ssh/known_hostsにないため、AnyBucketはターミナルと同じように、信頼する前に確認します。フィンガープリントを、サーバの管理者が公開しているものと照合してください。
鍵が変わったとAnyBucketに表示された場合は、いったん手を止めて理由を確認してください。サーバを再構築または再インストールしたあとなら、新しい鍵になるのは想定どおりです。そうでなければ、接続しないでください。鍵が変わっている場合、想定しているサーバと通信していない可能性があります。詳しくはトラブルシューティングをご覧ください。
うまくいかないときは
- まずターミナルで試す:AnyBucketで使っているのとまったく同じホスト名で試します(
ssh staging)。失敗する場合、問題はアプリではなくSSHの設定にあります。 -vを付ける:ssh -v stagingを実行すると、sshが試す鍵と設定の行がわかります。- エージェントを確認する:
ssh-add -lで、エージェントが保持している鍵が一覧表示されます。 - アクセス権を確認する:
sshは、ほかのユーザが読み取れる秘密鍵を拒否します。chmod 600 ~/.ssh/id_ed25519で修正できます。
それでも解決しない場合は、SFTPの鍵や踏み台サーバが使えないをご覧いただくか、ssh -vの出力から個人的な情報を除いたものを添えて、サポートにメールでお問い合わせください。