1

GitHubのハウツー「SSHキーの生成~/.ssh」に従うと、ディレクトリknown_hostsに、、、id_rsaおよびの3つのファイルが作成されますid_rsa.pub

このファイルknown_hostsはサーバー認証にid_rsa使用され、クライアント認証に使用されます(ここに違いを説明する記事があります)。

なぜGitHubを作成する必要があるのですか/なぜGitHubにはホストとユーザー認証ファイルの両方が必要なのですか?GitHub認証はどのように機能しますか?

どうも

4

3 に答える 3

5

これは単なる古い SSH 認証です。GitHub に固有のものは何もありません。

id_rsaid_rsa.pubは、秘密鍵と公開鍵という鍵の 2 つの半分です。事実上、公開鍵は秘密鍵のロックです。簡単にアクセスしたいサーバーにロック (公開鍵) を配置します。これは単なるロックであるため、他人に見られる心配はあまりありません。(秘密) キーをマシンに保持し、それを使用してそれらのサーバーにログインします。彼らはあなたが鍵に合う鍵を持っているのを見て、あなたを中に入れます.

(公開鍵を完全に信頼できないマシンに置くべきだと言っているわけではありませんssh -A。.

known_hosts実際にはこれとはあまり関係がありません。接続したすべてのサーバーのフィンガープリントを保存する場所であるsshため、フィンガープリントが変更されると、恐ろしい警告が表示される可能性があります。(これは、同じマシンではないことを意味します。サーバー側で何かが根本的に変更されたか、接続がハイジャックされたかのいずれかです。)

とにかく、Git 自体が理解できるプロトコルの 1 つが SSH です。git@github.com:...リポジトリ URL として使用する場合、Git は SSH 経由で接続しているだけです。もちろん、GitHub はあなたが自分のマシンをいじることを望んでいないので、Git のことだけを許可し、完全なシェルを取得することは許可していません。

いつものように、Arch wikiにはこれについてもっとたくさんの言葉があります。

于 2013-02-26T23:09:12.287 に答える
4
  • known_hostsは、最初に接続したときにサーバーの ID を保存するため、次回同じサーバーに接続するときにわかります。これにより、次回接続したときに誰かがサーバーになりすますのを防ぎます (残念ながら初めてではありません)。

  • id_rsaあなたが本当にあなたであることを証明するあなたの秘密鍵です。これは絶対に渡さないでください

  • id_rsa.pub. _ _ この鍵については何も秘密がないので、必要な人なら誰にでも与えることができます。

サーバーに接続すると、SSH は最初にサーバーが正しいキーを持っていることを確認します(つまり、known hosts.サーバーへ。

  string    session identifier
  byte      SSH_MSG_USERAUTH_REQUEST
  string    user name
  string    service name
  string    "publickey"
  boolean   TRUE
  string    public key algorithm name
  string    public key to be used for authentication

サーバーは公開鍵 (以前に Github にアップロードしたもの) を使用して署名を検証し、それが正しければ、クライアントは認証されます。

于 2013-02-26T23:08:51.303 に答える
1

known_hostsファイルは、SSH経由で実際にホストに接続するたびにsshによって使用されます。サーバー用のある種の署名付きキーを格納します。そして、それが変化すれば、あなたは知っているでしょう。

ssh-keygen -t rsa -C yourgithub@accountemail.comid_rsa.pubgithubに渡すSSHキーを生成するために使用されます。次に、githubに接続するとid_rsa~/.sshフォルダーに秘密鍵があり、これを使用してgithubで情報を検証します。

これは非常に低レベルの説明ですが、秘密鍵(.pub以外)ファイルがあなたの終わりであり、.pubはgithub用であり、known_hostsはボックスが何であるかを知るためのものです。

どのキーがどのホストに送られるかを指定するために使用するconfigファイルを生成することもできます。~/.ssh

authorized_keysとknown_hostsは完全に異なります。

SSHサーバー(sshd、つまり)は、authorized_keys、または/etc/ssh/sshd_config/別のキーの公開側を知るために内部で定義されているファイルを使用します。したがって、ユーザーがサーバーに接続すると、ユーザーは秘密鍵を渡し、SSHサーバーはauthorized_keys内にある公開鍵と照合し、一致しない場合は機能しません。

Githubはauthorized_keys、ユーザーに対していわば話すことを維持しています。公開鍵はアカウントのauthorized_keysに入り、ssh経由でclone、pushなどに接続すると、送信した秘密鍵と、既に知っている公開鍵がチェックされます。

于 2013-02-26T23:03:16.303 に答える