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_keys
server-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_keys
)A
があることを確認する必要があります。
しかも実際には使用~/.ssh/server-B.com
B
ファイルにキーを書き込むには、以下を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
項目を追加します。B
A
Host A
User a-user
Hostname server-A.com
IdentityFile %d/.ssh/server-B.com
その後、使用
ssh A
ただ使用することもできます基本既に別の秘密鍵がある場合を除き、鍵ファイルの名前です。
答え2
まあ、あなたはすべての内容を誤って理解しているのではなく、一部だけを誤って理解しているのです。
SSHから公開鍵(暗号化)でクライアント認証を使用するには:
秘密鍵ファイルが必要です。顧客- あなたのB。
ベストプラクティスは生産するクライアントのキーです。サーバーで行った操作、作成、コピーはお勧めできませんが、機能します。
最善の方法は、クライアントで正規化されたファイル名を使用することです(アルゴリズムの「タイプ」によって異なります)。
~/.ssh/id_rsa
RSA(v2の場合)、~/.ssh/id_ecdsa
ECDSAなどの場合、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)で実行し、サーバーの指紋を確認するように指示すると、正しく機能する必要があります。そうでない場合は、-v
Haxielのコメントに従い、詳細については複数のオプションを実行してください。特に、指定されたキーファイル(別名IDファイル)が表示されない場合は、権限の再確認を使用してくださいls -l
。
答え3
ホストの/etc/ssh/sshd_configファイルに公開鍵認証オプションが必要です。コメントを外してyesに設定します。
/etc/ssh/ssh_config 以外のホストシステムで /etc/ssh/sshd_config を編集していることを確認してください。 2番目のファイルはクライアント専用です。
必要に応じてホストAの管理者に連絡してください。