Linux / コマンド / ssh-copy-id - SSHの公開鍵をリモートアカウントに登録
ssh-copy-idは、ローカルSSH公開鍵をリモートアカウントのauthorized_keysに追加して、公開鍵ログインの準備を行います。これは秘密鍵をサーバーにコピーするコマンドではありません。
まずパスワードログインや他の認証方式で対象アカウントに接続できる必要があります。-iとして登録する公開鍵ファイルを指定すると、複数のローカル鍵の中から誤った鍵を選ぶ可能性が減ります。ツールは登録の有無を確認するためにSSH接続を試み、サーバーのポリシーによって動作が変わる場合があります。
基本的な文法
ssh-copy-id [オプション] [ユーザー@]ホスト
インストールされている実装とオプションは、配布版によって異なる場合があります。man ssh-copy-idで現在のシステムの説明を確認してください。
使用例
登録する公開鍵の確認
事前にssh-keygenで鍵ペアを作成します。秘密鍵ではなく.pub付きの公開鍵を選び、表示されるフィンガープリントが意図したものか確認します。例のホスト名とアカウントは実際の値に置き換えてください。
ssh-keygen -lf ~/.ssh/id_ed25519_work.pub
実際に登録する前のプレビュー
-nを使える実装では登録予定の鍵を表示し、リモートへ追加しません。ただし、登録済みかを調べるSSH接続や認証は発生し得ます。オフラインの確認ではありません。
ssh-copy-id -n -i ~/.ssh/id_ed25519_work.pub alice@server.example.com
公開鍵登録
リモートホストのキーを検証した後、該当アカウントに公開鍵を追加します。
ssh-copy-id -i ~/.ssh/id_ed25519_work.pub alice@server.example.com
公開鍵登録後に確認する
ssh-copy-idはローカルの公開鍵をリモートアカウントの許可キーリストに追加します。リモートアカウントに事前に接続でき、該当アカウントの権限が必要です。
ssh-copy-id -i ~/.ssh/id_ed25519_work.pub user@server.example.test
登録に成功したときに表示される可能性がある出力:
Number of key(s) added: 1
登録後は新しいターミナルでssh -o IdentitiesOnly=yes -o PreferredAuthentications=publickey -i ~/.ssh/id_ed25519_work user@server.example.testを実行し、選んだ鍵で認証できるか確認します。鍵のパスフレーズはアカウントのログインパスワードとは別です。登録メッセージだけでパスワード認証を無効にせず、既存の接続と非常時の管理経路を確保しておきます。
主なオプションと形式
| オプション・形式 | 説明 |
|---|---|
-i 公開鍵ファイル |
登録する公開鍵を明示的に選択します。 |
-n |
実際に登録せずに実行する作業を表示します。 |
-p ポート |
リモートSSHサーバーのポートを指定します。 |
-s |
サポートされている実装ではSFTP転送方式を使用します。 |
-f |
既に登録されているキーを確認せずに強制的に追加できるので、重複に注意してください。 |
使用する際の注意点
SSHのホストキー確認を済ませ、警告を無視して進めないでください。公開鍵の登録を取り消す場合は、リモート側の~/.ssh/authorized_keys全体を安全な場所へバックアップし、例では~/.ssh/id_ed25519_work.pubの内容に対応する1行だけを削除します。他の鍵やオプションを保持し、既存の接続を残して新しい接続で確認してください。
よくある質問
ssh-copy-id実行後もパスワードを求められる理由は?
初回登録には既存の認証が必要な場合があります。登録後も継続して求められる場合は、選んだ秘密鍵、サーバーのauthorized_keysの権限、SSHサーバーの設定を確認してください。
公式ドキュメント
オプションの正確な動作や実装ごとの差異は、ssh-copy-id関連の公式ドキュメントで確認できます。




