ユーザーの秘密鍵をロードすると、実行でき、ssh-copy-id user@remotehostname
パスワードの入力を求められます。正しいパスワードを入力したら、そのキーを使用してログインできるようになりました。私はいつも-i <path to public key>
引数を使ってこのコマンドを実行しましたが、今では公開鍵へのパスは必要ありません。
user@hostname としてログインすると、.ssh/authorized_keys ファイルを調べて、秘密鍵が公開鍵と一致することを確認します。これは混乱しています。公開鍵を提供したことがありません。
ssh-copy-idは、コマンドの実行時にローカルにロードされた秘密鍵と一致する公開鍵をどのように知ることができますか?認証キーファイルを提供していないときに何を追加する必要があるのか、どうすればわかりますか?
はっきり言ってほしい。私はこれを実行してきましたが、ssh-copy-id -i <public key>
これは私にとって意味があります。ログインし、公開鍵を承認された鍵ファイルにコピーします。ただし、公開鍵を提供しない場合(つまり、ssh-add <private key>
実行する前にssh-copy-idを実行している場合)、秘密鍵をロードしても機能し、公開鍵を取得する方法を理解できません。
編集:明確にするために、デフォルトのid * .pub命名規則を維持していません。したがって、id * .pub検索のマニュアルページのロジックは適用されないようです。実際、Randompairというキーペアを作成し、Randompairをロードし、rendompair.pubの名前をnewname.pubに変更し、ssh-copy-idを実行すると、まだ正しい公開鍵がロードされます。
Bashスクリプト自体を見ると、これがどのように達成されるかについて少し混乱しています。
答え1
これは、最近のシステムのマニュアルページでよく説明されています。このスクリプトにはいくつかのバージョンがあります。アーキテクチャLinuxそしてRHEL/セントOS同じバージョンがあるようです。Debian/Ubuntu、しかしFreeBSD少し異なるオプションがあります。
デフォルトssh-copy-id
では、コールにはssh-add -L
SSHエージェントに登録したキーが一覧表示されます。ssh-add -L
エージェントに秘密鍵がある公開鍵のリストを出力します。公開鍵も渡さないので、プロキシがこれをどのように実行するのか疑問に思います。答えは、秘密鍵から公開鍵を再構成することが常に可能であるということです(これはSSHがサポートするすべての暗号化システムに当てはまりますが、ほとんどはそうではありません)。ただし、これはキーの「数学」部分にのみ適用されます。公開鍵ファイルにはコメント(を使用して設定できますssh-keygen -C
)を含めることもでき、プロキシはこのコメントをロードしません。したがって、を使用しssh-copy-id
てプロキシを介してキーを取得すると、リモートホストはこのコメントにこのコメントを含めませんauthorized_keys
。
実行中のエージェントがない場合、またはキーがない場合は、最新のLinuxssh-copy-id
では(マニュアルページから直接)
最新のファイルの一致:
~/.ssh/id*.pub
、(一致するファイルを除く~/.ssh/*-cert.pub
)、作成したキーが使用したいssh-copy-id
キーでない場合は、touch(1)
ファイルから目的のキーを使用して.pub
最新のファイルに戻します。
以前のバージョンのスクリプトとLinux以外のバージョンには、これらの最新のファイル動作はありません。私が覚えている限り、以前のバージョンでもプロキシを検出できず、デフォルトのパスを読み取るようにデフォルト設定され~/.ssh/id_rsa.pub
ました。
答え2
ssh-copy-id は [1] ssh-add -L コマンドを使用して [2] を受け入れます。
現在、ssh-agentによって管理されているIDの公開鍵を表示できます。
したがって、-iを提供しない場合は、この方法で見つけることができます。