SSH キーの管理
この記事の英語版に更新があります。ご覧の翻訳には含まれていない変更点があるかもしれません。
最終更新日 2023年05月03日(水)
Private Spaces アプリのトンネリング (heroku ps:exec
) を有効にする SSH キーを設定します。
SSH Git トランスポートのサポートは、2021 年 11 月 30 日に終了しました。Git を使用してデプロイする場合のエラーを回避するために、現在 SSH を Git トランスポートとして使用しているアプリの Git リモートを更新してください。
ユーザーアカウントにアタッチされている SSH キーは、Private Space 内での ps:exec
を使用したアプリへのトンネリングについてのみ関係します。
Git Bash
アプリケーションを実行します。このアプリケーションのショートカットは通常はデスクトップに配置されており、Heroku CLI の一部としてインストールされます。SSH キーの生成
ssh-keygen
を使用して、公開鍵と秘密鍵のペアを生成します。
$ ssh-keygen -t ed25519
Generating public/private ed25519 key pair.
Enter file in which to save the key (/Users/adam/.ssh/id_ed25519):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /Users/adam/.ssh/id_ed25519.
Your public key has been saved in /Users/adam/.ssh/id_ed25519.pub.
The key fingerprint is:
SHA256:ZVZJqKLFasHmdPMoz5KTyd9jF3pCML8WAffYe3G5iDf adam@workstation.local
Ed25519 アルゴリズムをサポートしないレガシーシステムを使用している場合は、次を使用します。
ssh-keygen -t rsa
最初のプロンプトで Enter キーを押して、デフォルトのファイルの場所を使用します。次に、キーの安全なパスフレーズを入力します。
Heroku アカウントへのキーの追加
keys:add
CLI コマンドを使用して、1 つ以上のキーをアップロードし、これらをアカウントに関連付けます。Heroku CLI はデフォルトの場所でキーを検索し、これらをアップロードするか確認を求めます。
$ heroku keys:add
Found an SSH public key at /Users/adam/.ssh/id_ed25519.pub
? Would you like to upload it to Heroku? [Y/n]
Uploading /Users/adam/.ssh/id_ed25519.pub SSH key... done
-y
または --yes
フラグを keys:add
に付加すると、確認をスキップできます。
$ heroku keys:add --yes
Found an SSH public key at /Users/adam/.ssh/id_ed25519.pub
Uploading /Users/adam/.ssh/id_ed25519.pub SSH key... done
キーが別の場所にある場合、コマンドを実行するときに場所を指定します。キーのパスを宣言しても、確認がスキップされます (-y
または --yes
は不要です)。
$ heroku keys:add ~/.ssh/id_ed25519.pub
Uploading /Users/adam/.ssh/id_ed25519.pub SSH key... done
.pub
のファイル拡張子を常に確認してください。.pub
ファイルは、秘密鍵と公開鍵の SSH キーのペアの公開鍵の部分です。秘密鍵の部分にはファイル拡張子がありません。秘密鍵の部分を Heroku にアップロードしたり、誰かと共有したりすることは厳禁です。
Heroku ではセキュリティ上の理由で、新しいキーをアップロードした後にユーザーのメールアドレスにメール通知を送信します。
Heroku アカウントからのキーの除去
Heroku アカウントから取り消して関連付けを解除する必要があるキーは、Heroku CLI および Heroku Dashboard を介して除去できます。
Heroku CLI で keys:remove
を使用して、キーを取り消します。
$ heroku keys:remove adam@workstation.local
Removing adam@workstation.local SSH key... done
キーに名前がないか、固有名がない場合、CLI を介してキーを除去するときは、公開鍵の文字列の一部を指定します。次に例を示します。
$ heroku keys:remove AAAAAAAAAA
Removing adam@workstation.local SSH key... done
keys:clear
を使用して、ユーザーアカウント上のすべてのキーを除去します。
$ heroku keys:clear
Removing all SSH keys... done
Account Settings (アカウント設定) ページの Heroku Dashboard を使用して、SSH Key (SSH キー) セクションでキーを取り消します。X をクリックすると、キーが削除されます。
関連付けられたキーの表示
keys
コマンドを使用して、アカウントに関連付けられたすべてのキーの一覧を表示します。
$ heroku keys
=== user@example.com Keys
ssh-ed25519 AAAABDD3cC...2kPRNJqfKp user@example.com
キー文字列のすべての出力を表示するには、keys
に --long
を付加します。ユーザーアカウントに複数のキーがある場合は、読みやすくするために、コマンドの出力をテキストにリダイレクトするか (heroku keys --long > keys.txt
)、出力を less
にパイプする (heroku keys --long | less
) ことを検討してください。
キーの機能の検証
Shield Private Space 内でアプリの One-off dyno を開始することによって、割り当てられた SSH キーが機能することを確認します。
$ heroku run bash -a shield-space-app-name
接続に成功した場合、キーが正常に機能していることを示しています。
一般的な SSH キーの問題
設定されたキーの不一致
Heroku に提供された SSH キーを使用するときの認証の失敗の一般的な原因は、アップロードされたキーが、認証プロセス中に提供されたキーと一致しないことです。テスト中に Permission denied (publickey)
が表示された場合、キーの機能を検証し、使用中の ssh
キーを確認します。ssh -v
によって、キーの絶対パスが次のメッセージで出力されます。
debug1: Offering public key: /path/to/key_file ...
キーが一致しない場合、Heroku に対して正しいキーをアップロードするか、heroku.com
ホストに対して別のキーを使用するよう ssh
を設定します。.ssh/config
に以下を配置します。
Host heroku.com
HostName heroku.com
IdentityFile /path/to/key_file
IdentitiesOnly yes
/path/to/key_file
は、適切なキーへの絶対パス (.pub
拡張子なし) に置き換えてください。
すでに使用中のキー
SSH キーをアップロードしようとしたときに This key is already in use by another account
が表示された場合、キーは別の Heroku ユーザーに関連付けられています。Heroku に正しいキーがあることを確認し、別のアカウントにログインして SSH キーを除去するか、新しいキーを生成してアップロードします。