警告:保護されていないプライベートキーファイル!Amazon EC2インスタンスにSSH接続しようとするとき


190

Amazon EC2インスタンスにPandaをセットアップする作業をしています。昨夜、アカウントとツールをセットアップしましたが、SSHを使用して自分の個人インスタンスとやり取りすることに問題はありませんでしたが、今のところ、PandaのEC2インスタンスへのアクセスは許可されていません。 パンダを使い始める

次のエラーが発生します。

@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @

Permissions 0644 for '~/.ec2/id_rsa-gsg-keypair' are too open.
It is recommended that your private key files are NOT accessible by others.
This private key will be ignored.

昨夜、個人のインスタンスにアクセスするためにキーペアを600に変更し、アクセス許可を0に設定し、新しいキー文字列を生成することを試みましたが、何も機能していないようです。

どんな助けでも、大きな助けになるでしょう!


ええと、ディレクトリで権限が777に設定されていない場合、ec2-run-instancesスクリプトがキーファイルを見つけられないようです。SSHは初めてなので、見落としている可能性があります。


ec2-run-instancesには、Amazon側に存在するキーペア名のみが必要です。SSHでログインするときは、実際の秘密鍵(ディスク上のもの)のみを使用する必要があります。ec2-run-instancesからどのようなエラーが発生していますか?
user27619 2008年

2
この質問のひどいタイトル。
MikeNereson、2011年

2
@MikeNereson:自由に編集してください。それが、ここで私たちが物事をより良くする方法です
Stu Thompson

600(10進数)ではなく0600(8進数)に設定してよろしいですか?
hyde

5
chmod 400 ~/.ssh/id_rsa 参照: stackoverflow.com/a/9270753/2082569
atulkhatri

回答:


209

昨夜、個人のインスタンスにアクセスするために、キーペアを600に変更しました。

そして、これは本来あるべき姿です。

EC2のドキュメント我々が持っている「あなたがOpenSSHの(または任意の合理的偏執SSHクライアント)を使用しているなら、あなたはおそらく、それはあなたによってのみ読み出し可能だように、このファイルのパーミッションを設定する必要があります。」 アマゾンのドキュメントへのリンクにリンクするパンダのドキュメントは、それがすべてどれほど重要であるかを実際には伝えていません。

キーペアファイルはパスワードのようなものであり、保護する必要があるという考え方です。したがって、使用しているsshクライアントでは、これらのファイルが保護され、アカウントのみがそれらを読み取ることができる必要があります。

ディレクトリを700に設定するだけで十分ですが、ファイルが600である限り、777を使用しても問題はありません。

発生している問題はクライアント側にあるため、フォローアップの質問には必ずローカルOS情報を含めてください。


3
私は今日、キーファイルをグループ読み取り可能にしたい状況になりました(個人ログインではなく、sshを使用して、リモートサーバーでスクリプトを実行し、この目的のためにリモートサーバーで専用ユーザーを使用し、authorized_keysをロックして、上記のスクリプトが実行され、オリジンサーバー上の複数のユーザーがスクリプトを実行するためのアクセス権を持つ必要があります)まあ、簡単な回避策は、アクセスが必要なすべてのユーザーの〜/ .ssh /にコピーを配置することです。
tobixen

@tobixen:2年後ですが...「正しい」回避策は、キーを専用ユーザーに配置し、グループユーザーがそのコマンドを専用ユーザーとしてsudoアクセスできるようにすることです。
Stu Thompson

EC2ドキュメンテーションへの@StuThompsonリンクが機能していないようです。更新していただけますか?
Aniket Thakur

私はそれをあなたの答えで機能させるために何をすべきかわかりません、答えを提供してください:)
Pratik

@Pratik両方のキーファイルに600を設定し、ディレクトリに777を設定すると機能します。
Jamo

55

秘密鍵ファイルを含むディレクトリが700に設定されていることを確認してください

chmod 700 ~/.ec2

ファイルの実行権限を取得する特別な理由はありますか?
ゾルタン

1
@Zoltánファイルではなくディレクトリです。
avmohan 2016年

これを.pemファイルで使用したところ、うまくいきました。
CGTheLegend 2017

30

これを修正するには、1)権限をデフォルトにリセットする必要があります。

sudo chmod 600 ~/.ssh/id_rsa sudo chmod 600 ~/.ssh/id_rsa.pub

別のエラーが発生する場合:接続を続行してもよろしいですか(はい/いいえ)?yesホストを既知のホストのリスト(/home/geek/.ssh/known_hosts)に追加できませんでした。

2)これは、そのファイルの権限も正しく設定されておらず、次のように調整できることを意味します。

sudo chmod 644 ~/.ssh/known_hosts

3)最後に、ディレクトリの権限も調整する必要があります。

sudo chmod 755 ~/.ssh

これにより、バックアップと実行が可能になります。


17

秘密鍵ファイルは保護する必要があります。私の場合、私は長い間public_key認証を使用しており、許可を秘密鍵の600(rw- --- ---)と644(rw- r-- r--)およびホームフォルダー内の.sshフォルダーには、700の権限(rwx --- ---)が付与されます。これを設定するには、ユーザーのホームフォルダーに移動し、次のコマンドを実行します


.sshフォルダーに700権限を設定する

chmod 700 .ssh


秘密鍵ファイルに600権限を設定します

chmod 600 .ssh/id_rsa


公開鍵ファイルに644権限を設定する

chmod 644 .ssh/id_rsa.pub


2

秘密鍵、公開鍵、known_hostsを同じディレクトリに保存し、以下のようにログインしてみます。

ssh -I(small i) "hi.pem" ec2-user@ec2-**-***-**-***.us-west-2.compute.amazonaws.com
  • ある意味で同じディレクトリ cd /Users/prince/Desktop。ここでlsコマンドを入力すると、表示されるはずです **.pem **.ppk known_hosts

注:同じディレクトリからログインを試みる必要があります。そうしないと、現在のディレクトリから.pemファイルが見つからないため、アクセス権拒否エラーが発生します。


任意のディレクトリからSSHで接続したい場合は、~/.ssh/configファイルに以下を追加できます...

Host your.server
HostName ec2-user@ec2-**-***-**-***.us-west-2.compute.amazonaws.com
User ec2-user
IdentityFile ~/.ec2/id_rsa-gsg-keypair
IdentitiesOnly yes

これで、ディレクトリの場所に関係なく、単純に入力することでssh your.server(または「ホスト」の後に付ける名前を)サーバーにSSH接続できます。


1

Windowsでは、git bashを使用して、そこでLinuxコマンドを使用してみてください。簡単なアプローチ

chmod 400 *****.pem

ssh -i "******.pem" ubuntu@ec2-11-111-111-111.us-east-2.compute.amazonaws.com

WSLを使用している場合は、必ずpemファイルをLinuxフォルダーにコピーしてください。chmodは/ mntディレクトリでは効果がないためです。
パウロマーソン

1

chmodコマンドを使用してファイルのアクセス許可を変更する

sudo chmod 700 keyfile.pem

0

別のことを考えています。存在しない別のユーザー名でログインしようとすると、これがメッセージになります。

だから私はあなたがec2-userでsshをしようとしているかもしれないと思いますが、私は最近ほとんどのcentos AMIがたとえばec2-userの代わりにcentosユーザーを使用していることを思い出します

したがってssh -i file.pem centos@public_IP、正しいユーザー名でsshを実行しようとしていることを教えてください。そうでない場合は 、〜/ .ssh / id_rsaまたはfile.pemに対する適切な権限があっても、このようなエラーメッセージが表示される大きな理由となる可能性があります


0

これに出くわした人のためのちょうどメモ:

共有されているキーを使用してSSHで接続しようとしている場合は、たとえば次のようになります。

ssh -i /path/to/keyfile.pem user@some-host

どこにkeyfile.pem公開鍵/秘密鍵は、あなたと共有されている、あなたは、接続するためにそれを使用していることを確認あなたにそれを保存します~/.ssh/と、chmod 777

自分のマシンの他の場所に保存されたファイルを使用しようとすると、OPのエラーが発生しました。それが直接関連しているかどうかはわかりません。


0

解決策は、ファイルの所有者のみが読み取り可能にすることです。つまり、8進モード表現の最後の2桁はゼロでなければなりません(例:mode 0400)。

OpenSSHはauthfile.c、次の名前の関数でこれをチェックしますsshkey_perm_ok

/*
 * if a key owned by the user is accessed, then we check the
 * permissions of the file. if the key owned by a different user,
 * then we don't care.
 */
if ((st.st_uid == getuid()) && (st.st_mode & 077) != 0) {
    error("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@");
    error("@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @");
    error("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@");
    error("Permissions 0%3.3o for '%s' are too open.",
        (u_int)st.st_mode & 0777, filename);
    error("It is required that your private key files are NOT accessible by others.");
    error("This private key will be ignored.");
    return SSH_ERR_KEY_BAD_PERMISSIONS;
}

コメントの後の最初の行を参照してください。これは、ファイルのモードに対して「ビット単位のAND」を実行し、最後の2桁の8進数のすべてのビットを選択します(07はの8進数で0b111、各ビットはそれぞれr / w / xを表します)。 。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.