SSHキーを使用してもパスワードなしでログインできません。

SSHキーを使用してもパスワードなしでログインできません。

2つの異なるホストに2つのシェルアカウントがあります。

  • シェルA:シェルSSHキーを使用してログインしたい(server-A.com)
  • シェルB:Aへのログインに使用するシェル。パスワードは必要ありませんが、SSHキーを使用してください(server-B.com)。

私はserver-A.comシステム管理者に電子メールを送り、彼は私に次のチュートリアルURLを提供しました。

私は次のことをしました。

  • server-A.comで秘密鍵/公開鍵SSH鍵生成を使用し、秘密鍵をserver-B.comに配置します。ssh-keygen -t rsa -C [email protected]~/.ssh/server-B.com
  • 走ってchmod 700 ~/.ssh/行ったchmod 600 ~/.ssh/server-B.com
  • server-A.com公開鍵を~/.ssh/authorized_keysserver-B.comに追加しました。

    $ cat ~/.ssh/server-B.com.pub >> ~/.ssh/authorized_keys     # on server-B.com
    
  • 確認しました~/.ssh/config(いいえ)、/etc/ssh/ssh_config次の内容が含まれています(他の#comment行は印刷されません)

    #   PasswordAuthentication yes
    SendEnv LANG LC_*
    HashKnownHosts yes
    GSSAPIAuthentication yes
    

    シェルBから:

    $ ssh-keygen -f "/home/username/.ssh/known_hosts" -R server-A.com
    

メモ:私はチュートリアルに従いました。https://kb.iu.edu/d/aewsそしてhttps://www.digitalocean.com/docs/droplets/how-to/add-ssh-keys/create-with-openssh/

何が間違っていますか?

答え1

Bログインするには秘密鍵だけが必要ですA。リモートシステムAでキーを生成しないでください。リモートシステムは、あなたの個人的なアイデンティティを知る必要はありません。

AからシステムにログインしようとしていますB。これは意味する~/.ssh/authorized_keys Aシステムに公開鍵を含める必要があります(入力できるように)。システムはBログインにローカルでこのファイルを必要としませんA

~/.ssh両方のホストに対する権限が700あり、その中にあるファイルに対する600権限(含まれている~/.ssh/authorized_keysAがあることを確認する必要があります。

しかも実際には使用~/.ssh/server-B.comBファイルにキーを書き込むには、以下をA使用する必要がありますssh

ssh -i ~/.ssh/server-B.com  [email protected]

またはssh-agentキーを実行して追加します。

eval "$( ssh-agent )"
ssh-add ~/.ssh/server-B.com

ssh [email protected]

または、システムに次の~/.ssh/config項目を追加します。BA

Host A
    User a-user
    Hostname server-A.com
    IdentityFile %d/.ssh/server-B.com

その後、使用

ssh A

ただ使用することもできます基本既に別の秘密鍵がある場合を除き、鍵ファイルの名前です。

答え2

まあ、あなたはすべての内容を誤って理解しているのではなく、一部だけを誤って理解しているのです。

SSHから公開鍵(暗号化)でクライアント認証を使用するには:

  • 秘密鍵ファイルが必要です。顧客- あなたのB。

    ベストプラクティスは生産するクライアントのキーです。サーバーで行った操作、作成、コピーはお勧めできませんが、機能します。

    最善の方法は、クライアントで正規化されたファイル名を使用することです(アルゴリズムの「タイプ」によって異なります)。~/.ssh/id_rsaRSA(v2の場合)、~/.ssh/id_ecdsaECDSAなどの場合、ssh-keygenこれはクライアントで実行されている場合はデフォルトで行われます。以前のように別の名前を使用することは、実行するたびにファイル名を指定する必要があることを意味します。sshたとえばssh -i ~/.ssh/server-B.com user@host [command...]、構成ファイルを設定して、そのファイルを自分の名前IdentityFile(グローバルまたは特定のホスト)として指定する必要があります。

    秘密鍵ファイルには他のユーザーがアクセスできないはずです。 AFAICSあなたはchmod正しいです。

  • 公開~/.ssh/authorized_keys仕える人——あなたのA。

    cat >>既存のコンテンツを保持し、新しい行を追加するので、通常使用することをお勧めします。使用されなくなった、または認証されていないキーまたはユーザーに対して使用されなくなった既存の行がある場合(ユーザーが判断した場合)、きちんと維持するためにその行を削除できますが、必ずしもそうではありません。

    そして、そのauthorized_keysファイルは他のユーザーが書くことはできません。これはシステムのデフォルト値でも、そうでない場合もあります。それ以外の場合は、chmodキーファイルと同じ方法で使用してください。

  • known_hostsクライアント(B)のファイルからサーバー(A)エントリを削除することは、次の場合にのみ必要です。仕える人キーが変更されたか、使用されなくなりました。クライアント認証とは何の関係もありません。これを不必要に行うと、次回の要求を受信したときに誤ってサーバーキーの指紋を手動で確認した場合、攻撃者がデータを傍受、盗み、変更する機会を提供する可能性があります。

そのため、authorized_keysサーバー(A)を修正してssh -i ~/.ssh/server-B.com user@serveranameクライアント(B)で実行し、サーバーの指紋を確認するように指示すると、正しく機能する必要があります。そうでない場合は、-vHaxielのコメントに従い、詳細については複数のオプションを実行してください。特に、指定されたキーファイル(別名IDファイル)が表示されない場合は、権限の再確認を使用してくださいls -l

答え3

ホストの/etc/ssh/sshd_configファイルに公開鍵認証オプションが必要です。コメントを外してyesに設定します。

/etc/ssh/ssh_config 以外のホストシステムで /etc/ssh/sshd_config を編集していることを確認してください。 2番目のファイルはクライアント専用です。

必要に応じてホストAの管理者に連絡してください。

関連情報