公開鍵はどのようにサーバーに「送信」され、秘密鍵はどのようにSSHに「使用」されますか?


11

2台のLinuxマシン、B.だから、Aは、公開鍵(おそらく生成にSSHできるようにする必要があります上で実行されているAとBのスクリプトがありますssh-keygen-generatedをid_rsa.pub)、およびそのそれぞれの秘密鍵(もう一度、おそらく使用してid_rsaメイクには)そのSSH接続。

上記の内容が間違っていたり、誤解されている場合は、修正してください。

私は多かれ少なかれターゲットにいると仮定します:

  • Aは公開キー(id_rsa.pub)をどのように「付与」しますか?これは手動プロセスである必要がありますか、それとも自動化できますか?手動の場合、プロセスは何ですか?自動化されている場合、コマンドは何ですか?Bがこの公開キーを「取得」すると、どこに保存されるのですか?
  • BへのSSH接続を開始するとき、A id_rsaはその接続の一部としてその秘密鍵()をどのように「使用」しますか?

3
なぜダウンボットさんの説明がありませんか?それは研究を示しており、SSCCEであり、私の知る限り、それは複製ではありません。同意しない場合、およびこれが重複していると思われる場合は、重複していると思われる質問へのリンクを提供してください!
user3178622

私はこの質問を決して下票しなかったし、決して悪いとは思わないが、おそらく情報セキュリティスタックがより適切な場所だろう。
MC10

3
私も反対票を投じませんでしたが、なぜ誰かが投票したのかは理解しています。これは広く使用されているログイン方法ですが、Googleの検索結果には、記事の仕組みではなく、機能させる方法が散らかっていることに同意します。探している情報を見つけることは可能です。
タイソン

5
SSCCEの概念は、コードに関するものではない質問には実際には当てはまりません。
スコット

2
重複したが、関係ありません:superuser.com/questions/383732/how-does-ssh-encryption-work。質問の2番目の部分(秘密鍵の使用方法)に答えるかもしれません
ジェイ

回答:


5

ssh-keygen公開キーと秘密キーの両方を生成します。最初はローカルにのみ存在します。公開キーを別のホストに与えることは、ユーザーがサーバーBの責任者に送信するか、パスワードのあるアカウントを持っている場合はログインして自分で置くことができるため、ユーザーが手動で行う必要があります。サーバーBへのパスワードなしのログインを許可するには、サーバーBの〜/ .ssh / authorized_keysファイルに公開キーを追加する必要があります(1行につき1つの公開キー。このファイルには任意の数のキーを含めることができます)。ssh-copy-idIDをコピーしてファイルに入れるlinuxコマンドがあります。

デフォルトでは、sshはファイル〜/ .ssh / id_XXXを秘密鍵として使用します。XXXは、rsa、dsa、またはキーが生成された任意のプロトコルです。IIRC、dsaは古いため、使用しないでください。別の秘密鍵を使用する場合は、を使用してsshコマンドで指定できます-i。使用されている秘密鍵がリモートマシンの公開鍵(ログインしているユーザーのアカウントのauthorized_keysファイル内)と一致している限り、パスワードを入力する必要はありません。


@BamaPookieに感謝-いくつかのフォローアップ:(1)ssh-keygen実行されると、2つのキーが「ローカルにのみ存在する」ことに言及しますか?どこ?!?以下のように、フォルダには、私が何をに移動して見ることができるid_rsa.pubid_rsa?(2)にssh-add公開キーを追加するためのコマンドだと思いましたauthorized_keysか?違いは何だssh-copy-idとはssh-add?再度、感謝します!
user3178622

2
@ user3178622 re '1'目の前にありませんが、~/.ssh/id_rsa re '2'のように見えます。ssh -addはauthorized_keysに追加するためではなく、キーチェーンに追加するためです。sshは使用していません。 -追加します。ssh-addは、キーフレーズを必要とするキーを使用するたびにキーフレーズを入力する必要がないようにすることを目的としています。あなたのsshキーがキーフレーズを必要としない場合、ssh-addを使用する理由はないと思うので、まだssh-copy-idを使用するか、公開キーを手動でコピーする必要があると思いますauthorized_keys
barlop

2
ssh-keygenはファイルを保存する場所を尋ねますが、デフォルトの場所は〜/ .ssh /にあります。ssh-copy-idは公開鍵をリモートホストにコピーします。ssh-addは、ローカルキーリングにプライベートキーを追加します。ローカルキーリングにプライベートキーを追加すると、ssh接続を試行するときにデフォルトでチェックされます(つまり、-iで指定する必要はありません)。
BamaPookie

1
@BamaPookie「ローカルキーリングに秘密キーを追加すると、ssh接続を試みるときにデフォルトでチェックされます(つまり、-iで指定する必要はありません)。」<---明確にする価値がある選択したデフォルトの秘密鍵が変更されるため、id_rsaの代わりに、キーリングからのものになると思います。(もちろん、ssh-addを使用しなくても、-iで秘密鍵を指定する必要はありません。デフォルトがありますが、デフォルトは異なります)。
-barlop

3

AとBの2つのLinuxマシンがあります。Aで実行されるスクリプトは、BにSSH接続できる必要があります。したがって、Aは公開キー(おそらくssh-keygenで生成されたid_rsa.pub)を生成し、それぞれの秘密キー(再び、おそらくid_rsa)そのSSH接続を確立します。

上記の内容が間違っていたり、誤解されている場合は、修正してください。

私は多かれ少なかれターゲットにいると仮定します:

ええ

ただし、AがBに接続できるようにするには、BがAの公開鍵をBのauthorized_keysファイルにリストする必要があります

また、id_rsa.pubとsshをBに削除しても機能します。公開鍵は各ssh接続で新しく生成され、id_rsa.pubに保存されないためです。

Aはどのようにして公開鍵(id_rsa.pub)を「与える」のですか?これは手動プロセスである必要がありますか、それとも自動化できますか?手動の場合、プロセスは何ですか?自動化されている場合、コマンドは何ですか?

マニュアル -のようなもの

から-

cat ~/.ssh/id_rsa.pub | ssh USER@HOST "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"

またはさらに手動で、コマンドを分解する

A $ cat id_rsa.pub | ssh user@host 'cat>~/a.a'

その後、Bで〜/ .sshが存在することを確認してから cat a.a >> ~/.ssh/authorized_keys

また、Bのauthorized_keysを前後にcatして、キーがリストされていることを確認できます。

または、id_rsa.pubをメールアカウントにメールで送信し、BからBがメールを確認して、id_rsa.pubのコンテンツをauthorized_keysファイルに追加できます。

自動的に

ssh-copy-idコマンド

sshできるようにする必要があるため、パスワードアクセスが必要です。

ssh user @ hostを実行する代わりに、ssh-copy-id user @ hostを実行し、パスワードの入力を求められます。パスワードを入力すると、公開鍵がコピーされます。そして、次にssh user @ hostを実行すると、キーが使用されます。

Bがこの公開鍵を「取得」すると、どこに保存されますか?

Bの〜/ .ssh / authorized_keys

BへのSSH接続を開始するとき、Aはその接続の一部としてどのように秘密鍵(id_rsa)を「使用」しますか?

まあ、私はそれについてあまり知りません、私の頭の上のものですが、1つのキーで暗号化されたものは他のキーで復号化でき、自分を識別することはデータを送信することとは少し異なります。一時キーについても。


ありがとう@barlop!BamaPookieの回答の下にある私の質問をご覧ください。同じ質問があります!
user3178622
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.