authorized_keysファイルにSSHキーを追加するにはどうすればよいですか?


185

Amazon EC2にUbuntuサーバーがあり、これを開発に使用していますが、今日は~/.ssh/authorized_keysファイルからすべてを愚かにクリアしました。幸い、SSHを開いているので、まだ接続されており、ファイルを修正できますが、キーファイルを元に戻しようとしても機能しません。ローカルマシン上のサーバーからはまだ許可が拒否されます。

authorized_keysパーミッションは600です。SSHキーをssh-rsaで追加し、ssh-rsaをオフにしてみました。SSHキーをすべて1行にすることも試みましたが、それでもうまくいきませんでした。

何らかの方法でファイルをリロードする必要がある他のことはありますか?


3
数年後、これはまだ関連性があり、活発に見えます。観察したかっただけで、弾丸をかわしたことについて話します:「幸いなことに、SSHを開いているので、まだ接続されています[..]」-sheesh!; dP
ノストロモフ

1
私の誕生日に編集されたこの投稿は、2か月前の誕生日に私を救った。
イッピライ

回答:


198

あなたは必要があります決してその内容が始まると、ファイルを保存していない-----BEGIN RSA PRIVATE KEY-----ことは、あなたで、サーバー上のプライベートキー。代わりに、公開キーを~/.ssh/authorized_keysファイルに配置する必要があります。

この公開鍵は、.pubを使用ssh-keygenして生成されたときに拡張子を持ち、その内容はで始まりますssh-rsa AAAAB3。(バイナリ形式については、この質問への回答で説明されています)。

~/.sshサーバー上のアクセス許可は700である必要があります。~/.ssh/authorized_keys(サーバー上の)ファイルのモードは600であると想定されています。クライアント側の(プライベート)キーのアクセス許可は600である必要があります。

秘密鍵がパスワードで保護されておらず、サーバーに置いた場合、新しいものを生成することをお勧めします。

ssh-keygen -t rsa

誰もサーバーから削除された秘密キーを回復できないことが確実な場合、これをスキップできます。

これで解決しない場合はssh、より詳細なオプションを指定して実行します。

ssh -vvv user@example.com

サーバー側では、/var/log/auth.log詳細を確認できます。


1
Amazon EC2サーバーでは、プライベートキー(key.pem)しか取得できません。私はどこにも公開鍵を持っていません。
デイブロング

3
@Dave Long:ssh-keygen -t rsa新しく作成したid_rsa.pubファイルを使用して新しいキーを生成~/.ssh/authorized_keysし、サーバーに配置する必要があります。参照してくださいdocs.amazonwebservices.com/AWSEC2/latest/UserGuide/...
Lekensteyn

15
@DaveLong:秘密鍵から公開鍵をいつでも生成できます。あなたは、単に次のコマンドでこれを行うことができます: ssh-keygen -y -f key.pem > key.pub
モルガン・スーン

5
@MorganBlackthorneそれは事実ですが、リモートソースから秘密鍵を受け入れるのではなく、秘密鍵を生成することをお勧めします。秘密鍵が漏洩しなかったことを完全に確認することはできません。
-Lekensteyn

2
@GerratFixed²。
Lekensteyn

175

リモートマシンの公開鍵をインストールする別の方法authorized_keys

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

いくつかの利点:

  • ssh-copy-idインストールする必要はありません。

  • mkdirに追加id_rsa.pubする 前に動作することを保証しますauthorized_keys


10
あなたの答えは、追加のパッケージなしで複数のリモートマシンでこれを行うのに役立ちました、ありがとう。
nol 14年

これは、「〜/ .ssh」ディレクトリと「〜/ .ssh / authorized_keys」ファイルが正しい権限で作成されることを保証するものではありません。
ニック14年

1
@ニック、私はその問題を抱えていました。それでは、chmod(700 / folder、600 / file)でcreateが適切に欠落している場合、最初にそれらの存在を実際に確認し、追加する必要がありますか?それで、多分それは1つのライナーになることはできません?
AnneTheAgile

7
@AnneTheAgile @MariusButuc mkdir -p ~/.sshの回答の一部をに変更するだけで、umask 077 && mkdir -p ~/.ssh適切に機能するようにする必要があります。
ニック14

1
ty @Nick!やってみます。
AnneTheAgile

128

ログインベースの認証を使用ssh-copy-idしている場合は、を使用して公開キーをリモートサーバーに追加します。

ssh-copy-id user@host

1
これはMacでは有効なコマンドではないようです。これが私のクライアントマシンです。
デイブロング


13
OSXでは、brewを使用してインストールできますbrew install ssh-copy-id
。– phil

Macportsでは、このコマンドはを使用してインストールできますsudo port install openssh +ssh_copy_id+ssh_copy_idssh_copy_idバリアントを使用してopensshをインストールします。
ステファンLasiewski 14

6
phildawson.tumblr.comの指示では、信頼されていないソフトウェアをルートとしてインストールするように求められていることに注意してください。これは非常に危険であり、作成者を信頼できることがわかっていない限り、ハッキングされる良い方法です。
ステファンLasiewski 14

38
local> scp .ssh/id_dsa.pub remote.com:
local> ssh remote.com
remote> cat id_dsa.pub >> .ssh/authorized_keys
remote> rm id_dsa.pub
remote> exit

16

最も簡単な方法は、コピーして貼り付けることです...

id_rsa.pub最初に「ssh-rsa」を含むローカル公開キーの内容を、メールアドレスで終わるまで表示/コピーします。

cat ~/.ssh/id_rsa.pub

次にauthorized_keys、サーバー上で編集し、クリップボードの内容をそのファイルの他のキーの下に貼り付けます。

nano ~/.ssh/authorized_keys

保存しCtl+O、ファイルCtl+Xを終了し、SSHセッションexitを終了し、再度ログインして、動作することを確認します。パスワードを要求しなかった場合は機能しました。


5

これは具体的にはAWSインスタンスに関するものであり、すべての答えは問題をLinuxの問題として扱うだけで、あたかもそれがハードウェアの一部であるかのように、これに貢献できると思いました。最初に理解する必要があるのは、EC2インスタンスをハードウェアとして決して扱わないことです。それはあなたのためにより多くの仕事を作成するだけです。それは、AWSで人々が抱えている最大のハードルです。インスタンスのAMIを作成し、必要なキーを新しいインスタンスに注入します。cloud-initが自動的に処理します。より詳細には、元のAMIから新しいインスタンスを作成するときに正しい公開キーを使用するだけです。承認済みの回答のコメントのように、pubファイルとpemファイルの独自のキーペアを生成する場合、AWSにはEC2で使用する公開キーをアップロードするオプションがあります。

http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html#how-to-generate-your-own-key-and-import-it-to-aws


3

公開鍵を保存した後、PC上のディレクトリとファイルに秘密鍵を保存する必要があります。そして、パテに関するsshのauthセクションで、デスクトップに保存した秘密鍵ファイルをポイントする必要があります。それが動作します。わたしにはできる。


1
Windowsコンソールにすべてのssh機能をインタープリターに追加できる場合、それが大好きです
デニス14年

2

キーを配置するリモートマシンでシェルを取得し、このワンライナーを実行して必要なファイルとディレクトリを作成し、それらの権限を設定し、ファイルにキーを追加します。もちろん、KEYGOESHERE以下の部分とその後のコメントを変更する必要があります。

mkdir -p ~/.ssh && chmod 700 ~/.ssh && touch ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys && echo "ssh-rsa KEYGOESHERE user@remotehost or note" >> ~/.ssh/authorized_keys

1

テキストファイルに公開キーファイル名のリストがあり、公開キーファイルの大きなバッチも同じディレクトリにあるというバリエーションがあります。

このバリエーションは、インポートする公開鍵ファイルの膨大なリストを提供している場合に役立ちます:-)

$ for i in $(cat ListOfPubKeyFiles.txt) ; do cat $i | ssh User@Hostname "cat >> ~/.ssh/authorized_keys"; done
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.