はじめに
SSH copy-id コマンドは、サーバー間で SSH 鍵認証を簡単に設定するための便利なツールです。ただし、このコマンドを使用しようとすると、"/usr/bin/ssh-copy-id: error: no identities found" というエラーが発生することがあります。このチュートリアルでは、この問題をトラブルシューティングして解決し、スムーズな SSH 鍵認証プロセスを保証するための手順を説明します。この**実験 (Lab)**を終えるまでに、SSH 鍵認証の仕組みを理解し、システム上で適切に設定できるようになります。
SSH 鍵認証の理解
"no identities found" エラーのトラブルシューティングに入る前に、SSH 鍵認証とは何か、そしてその仕組みを理解することが重要です。
SSH 鍵認証とは?
SSH (Secure Shell) 鍵認証は、リモートシステムにログインする際に、毎回パスワードを入力する必要がない安全な方法です。これは、暗号化鍵のペアを使用します。
- ローカルマシンに残る秘密鍵 (private key)
- リモートサーバーにコピーされる公開鍵 (public key)
リモートサーバーに接続しようとすると、SSH クライアントは秘密鍵を使用して署名を作成します。サーバーは、authorized_keys ファイルに保存されている公開鍵を使用してこの署名を確認します。署名が有効な場合、パスワードを入力しなくてもアクセスできます。
ssh-copy-id とは?
ssh-copy-id コマンドは、公開鍵をリモートサーバーにコピーするプロセスを簡素化するユーティリティです。これは、公開鍵をリモートサーバーの ~/.ssh/authorized_keys ファイルに追加し、将来の接続でパスワードなしの認証を可能にします。
システムに SSH 鍵がすでに存在するかどうかを確認しましょう。ターミナルで次のコマンドを実行します。
ls -la ~/.ssh
ファイルが表示されない場合、または .ssh ディレクトリが存在しない場合でも、心配しないでください。次のステップですべてを作成します。
SSH 鍵の生成
SSH 鍵を持っていない場合、または新しい鍵を作成したい場合は、ssh-keygen コマンドを使用して生成できます。これは、"no identities found" エラーを解決するための最初のステップであることがよくあります。
新しい SSH 鍵ペアの作成
次のコマンドを実行して、新しい SSH 鍵ペアを生成しましょう。
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
このコマンドは次のことを行います。
-t rsa: 作成する鍵のタイプ (RSA) を指定します。-b 4096: ビット長 (より強力な暗号化) を指定します。-C: 鍵を識別するのに役立つコメント (通常はメールアドレス) を追加します。
このコマンドを実行すると、次のプロンプトが表示されます。
- 鍵を保存するファイルの場所を入力します (Enter キーを押して、デフォルトの場所
~/.ssh/id_rsaを使用します)。 - パスフレーズを入力します (Enter キーを 2 回押すとパスフレーズなしになりますが、パスフレーズを使用するとセキュリティがさらに強化されます)。
出力は次のようになります。
Generating public/private rsa key pair.
Enter file in which to save the key (/home/labex/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/labex/.ssh/id_rsa
Your public key has been saved in /home/labex/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:abcdefghijklmnopqrstuvwxyz1234567890ABCD your_email@example.com
The key's randomart image is:
+---[RSA 4096]----+
| |
| |
| |
| |
| |
| |
| |
| |
| |
+----[SHA256]-----+
SSH 鍵の作成の確認
次に、鍵が正しく作成されたことを確認しましょう。
ls -la ~/.ssh
出力に秘密鍵 (id_rsa) と公開鍵 (id_rsa.pub) の両方のファイルが表示されるはずです。
total 20
drwx------ 2 labex labex 4096 Sep 15 10:10 .
drwxr-xr-x 5 labex labex 4096 Sep 15 09:55 ..
-rw------- 1 labex labex 3389 Sep 15 10:10 id_rsa
-rw-r--r-- 1 labex labex 746 Sep 15 10:10 id_rsa.pub
-rw-r--r-- 1 labex labex 444 Sep 15 10:00 known_hosts
公開鍵ファイルの内容も見てみましょう。
cat ~/.ssh/id_rsa.pub
出力は、ssh-rsa で始まり、長い文字列が続き、メールアドレスまたはコメントで終わる 1 行であるはずです。
SSH 鍵が存在することを確認できたので、次のステップに進みましょう:"no identities found" エラーのトラブルシューティングと解決。
'No Identities Found' エラーの理解と解決
SSH 鍵が用意できたので、"no identities found" エラーが発生する理由とその修正方法を理解しましょう。
エラーの一般的な原因
"no identities found" エラーは、通常、次のいずれかの理由で発生します。
- SSH 鍵が存在しない
- SSH 鍵がデフォルトの場所にない
- SSH 鍵の権限が正しくない
ssh-copy-idコマンドが使用する公開鍵を見つけられない
SSH 鍵がデフォルトの場所に存在することを確認したので、権限を確認しましょう。
SSH 鍵の権限の確認と修正
SSH は、セキュリティ上の理由から、ファイル権限に非常に厳格です。次のコマンドを実行して、.ssh ディレクトリとその内容の権限を確認します。
ls -la ~/.ssh
適切なセキュリティのためには:
.sshディレクトリは、700 (rwx------) の権限を持つ必要があります。- 秘密鍵 (
id_rsa) は、600 (rw-------) の権限を持つ必要があります。 - 公開鍵 (
id_rsa.pub) は、644 (rw-r--r--) の権限を持つ必要があります。
権限が正しくない場合は、次のコマンドで修正できます。
chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_rsa
chmod 644 ~/.ssh/id_rsa.pub
ssh-copy-id の正しい使用方法
次に、ssh-copy-id コマンドを正しく使用してみましょう。正しい構文は次のとおりです。
ssh-copy-id -i ~/.ssh/id_rsa.pub username@remote_host
ここで:
-i: 使用するアイデンティティファイル (公開鍵) を指定します。username: リモートサーバー上のユーザー名です。remote_host: リモートサーバーのホスト名または IP アドレスです。
実験 (Lab) 環境では、ローカルマシンを使用してこれをシミュレートします。実行:
ssh-copy-id -i ~/.ssh/id_rsa.pub labex@localhost
リモートユーザーのパスワードを求められます。
デスクトップ環境でターミナルウィンドウを開きます。デスクトップ環境のターミナルのみが環境変数を設定します。

パスワードを取得するには、次のコマンドを実行します。
printenv | grep PASSWORD
注: このコマンドは、上部のメニューバーから開いたターミナルではなく、デスクトップ環境のターミナルで実行する必要があります。
このコマンドは、"PASSWORD" を含むすべての環境変数を表示します。LABEX_PASSWORD=... という行を探してください。イコール記号の後の文字がパスワードです。
そのパスワードを入力すると、公開鍵がリモートサーバーにコピーされます。
"Number of key(s) added: 1" のようなメッセージが表示された場合は、鍵が正常にコピーされました。
SSH 鍵認証の検証
"no identities found" エラーを解決し、SSH 鍵をリモートサーバーに正常にコピーしたので、SSH 鍵認証が正しく機能することを確認しましょう。
SSH 鍵認証のテスト
実際の環境では、リモートサーバーに接続して SSH 鍵認証をテストします。
ssh username@remote_host
SSH 鍵が正しく設定されている場合は、パスワードを入力せずにログインできるはずです (鍵にパスフレーズを設定している場合は、パスフレーズを入力する必要があります)。
実験 (Lab) 環境では、localhost に SSH 接続を試みることでテストできます。
ssh labex@localhost
接続を確認するプロンプトが表示された場合 (localhost が known_hosts ファイルにないため)、yes と入力します。
次のようなメッセージが表示される場合があります。
The authenticity of host 'localhost (::1)' can't be established.
ECDSA key fingerprint is SHA256:abcdefghijklmnopqrstuvwxyz1234567890ABCD.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
パスワードを求められた場合は、SSH 鍵認証がまだ機能していないことを意味します。パスワードを入力せずに正常にログインできた場合は、SSH 鍵認証が正しく機能しています。
SSH 鍵認証の一般的な問題と解決策
SSH 鍵認証でまだ問題が発生している場合は、一般的な問題と解決策を以下に示します。
SSH サーバーの構成 (SSH Server Configuration): SSH サーバーは、公開鍵認証を許可するように構成する必要があります。これは通常、デフォルトで有効になっていますが、リモートサーバー上の
/etc/ssh/sshd_configファイルを調べて確認できます。grep PubkeyAuthentication /etc/ssh/sshd_configPubkeyAuthentication yesと表示されるはずです。ファイルの所有権 (File Ownership): ホームディレクトリと
.sshディレクトリは、自分が所有している必要があります。ls -ld ~ ~/.sshどちらも、所有者として自分のユーザー名が表示されるはずです。
SSH 接続のデバッグ (Debug SSH Connection): verbose フラグを使用して SSH 接続をデバッグできます。
ssh -v labex@localhostこれにより、認証プロセスに関する詳細情報が表示され、問題の特定に役立ちます。
SSH 鍵管理のベストプラクティス
SSH 鍵を管理するためのベストプラクティスを以下に示します。
- パスフレーズの使用 (Use a passphrase): SSH 鍵を生成するときは、セキュリティを強化するためにパスフレーズの使用を検討してください。
- サーバーごとに異なる鍵 (Different keys for different servers): セキュリティを強化するために、サーバーまたは目的ごとに異なる鍵を使用することを検討してください。
- 鍵のバックアップ (Backup your keys): SSH 鍵のバックアップを安全な場所に保管してください。
- 鍵の定期的なローテーション (Regularly rotate keys): 機密性の高い環境では、SSH 鍵を定期的にローテーションすることを検討してください。
これらの手順とベストプラクティスに従うことで、SSH 鍵認証が確実に信頼性と安全性を確保して機能するようにすることができます。
まとめ
この実験 (Lab) では、SSH copy-id コマンドを使用する際に発生する "no identities found" エラーのトラブルシューティングと解決方法を学びました。内容は次のとおりです。
- SSH 鍵認証の理解と ssh-copy-id コマンドの仕組み
- ssh-keygen コマンドを使用した SSH 鍵ペアの生成
- SSH 鍵の権限の確認と修正
- ssh-copy-id を正しく使用して、公開鍵をリモートサーバーにコピーする
- SSH 鍵認証のテストと検証
- SSH 鍵管理の一般的な問題とベストプラクティス
これらのスキルにより、システム間の安全でパスワードなしの SSH 接続をセットアップできるようになりました。これは、効率的なシステム管理と自動化に不可欠です。SSH 鍵認証は、パスワード認証よりも優れたセキュリティを提供するだけでなく、正当なユーザーのログインプロセスを簡素化します。
SSH 鍵はシステムへの直接アクセスを提供するものであるため、SSH 鍵を適切に保護することが重要であることを忘れないでください。常に秘密鍵を安全に保管し、追加の保護のためにパスフレーズの使用を検討してください。



