Amazon Ec2インスタンスにSSH接続しようとしています-アクセス許可エラー


745

これはおそらく一部の人にとって愚かな単純な質問です:)

Amazon EC2で新しいLinuxインスタンスを作成し、その一部として.pemファイルをダウンロードしてSSHで接続できるようにしました。

私がsshしようとしたとき:

ssh -i myfile.pem <public dns>

私は得ました:

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0644 for 'amazonec2.pem' are too open.
It is recommended that your private key files are NOT accessible by others.
This private key will be ignored.
bad permissions: ignore key: amazonec2.pem
Permission denied (publickey).

この投稿に続い、pemファイルをchmod +600しようとしましたが、sshを実行すると、次のようになります。

Permission denied (publickey).

ここで私はどんな男子生徒の間違いをしていますか?.pemファイルは、ホームフォルダー(osx内)にあります。権限は次のようになります。

-rw-------@   1 mattroberts  staff    1696 19 Nov 11:20 amazonec2.pem

2
このエラーは、間違ったpemファイルを使用している場合にも発生します。
Rahul Prasad

また、使用する指定のキーとしてキーペアを作成して選択した後で、インスタンスを作成したことを確認してください。私はこれを逆に行いました。
ゲーリー

私はWindowsでWinSCPを使用しています。ありません何もするchmod 400 myfile.pemそれが使用してmyfile.ppkPEMファイルからPuTTYgenをによって生成されたが。
Chetabahana 2016

このエラーは、適切なユーザーでログインしていない場合にも発生する可能性があります;)
andrea06590

回答:


1461

問題は、ファイルに間違ったmodがあることです。

実行することで簡単に解決-

chmod 400 mykey.pem

アマゾンの指示から取得-

SSHが機能するためには、鍵ファイルを公開してはなりません。必要に応じて、このコマンドを使用します。chmod400 mykey.pem

400はそれを読み取り専用にし、所有者のみが使用できるようにすることで保護します。


3
本当にありがとう!chmod 400は何をしますか?mykey.pemに?
コスタ

19
400は、それを読み取り専用にし、所有者のみに限定することで保護します。
Kof 2013

1
この後、ssh -l USERNAME_HERE -i .ssh / yourkey.pem public-ec2-hostを実行すると、「警告:IDファイルblabla.pemにアクセスできません:そのようなファイルまたはディレクトリはありません」が表示されます。
coolcool1994 2013

3
このコマンド+ ssh -i YOUR_PEM_FILE.pem ec2-user@YOUR_IP問題を修正しました。多分これは受け入れられる答えになるはずです...
c4k 2014

1
Windowsで同じように実行するにはどうすればよいですか?
Ahsan Mukhtar

262

ログインに間違ったユーザー名を使用している可能性があります。

  • ほとんどのUbuntuイメージにはユーザーがいます ubuntu
  • AmazonのAMIは ec2-user
  • ほとんどのDebianイメージには、rootまたはadmin

ログインするには、sshコマンドを調整する必要があります。

ssh -l USERNAME_HERE -i .ssh/yourkey.pem public-ec2-host

HTH


30
またはssh -i key.pem ubuntu @ servername
jsh

43
エラーメッセージはそれをすべて言います:.pem証明書ファイルは十分に保護されていません。以下に示すように、chmod 400 xyz.pemを実行します。
allprog 2012年

1
@allprog私にとっては、これは言うだけPermission denied (publickey).で何も起こさない...
Aram

1
問題が見つかりました-インスタンスを作成したときと同じキーを使用していませんでした
Aram Kocharyan 2013

12
これは解決策ではありません-ダウンロードされたキーファイルのファイル権限はデフォルトで844です。400にするchmod 500 <path_to_pem_file>必要があります。
Elad Meidar 2013年

62

私はこれがゲームに非常に遅いことを知っています...しかし、これは常に私にとってうまくいきます:

ステップ1

ssh-add ~/.ssh/KEY_PAIR_NAME.pem

ステップ2、単にsshで:)

ssh user_name@<instance public dns/ip>

例えば

ssh ec2-user@ec2-198-51-100-1.compute-1.amazonaws.com

これが誰かを助けることを願っています。


「ssh-add」は、*。pemファイルを〜/ .sshフォルダーにコピーするのと同じですか?
アレックス

1
>> * .pemファイルを〜/ .sshフォルダーにコピーするだけでは同じではありません。フォルダーに追加してから、コマンドssh-addを実行する必要があります。
super_p 14

ゲームに非常に遅れていますが、いくつかの説明を追加します... 1. .pemファイルを〜/ .sshディレクトリに追加します(必要に応じて作成します)、2。ssh-addコマンドを使用してIDを認証に追加しますエージェント; これは、sshを使用するときに.pemファイルを指定する必要がないことを意味します
Ian Atkin

2
ssh-addの後に¬/ .ssh / key.pem; エラーの取得認証エージェントへの接続を開くことができませんでした。eval ssh-agent -sはSSH_AGENT_PID = 3409を報告します。ssh-addを実行すると上記と同じエラーが発生します.........ここでのヘルプplz
Tariq '28

わあ、それは私のVPSへの将来のすべての接続にとって非常に便利でしょう。ありがとうメイト:)
Ahmad Mushtaq 2016年

36

わかりました、私のために働いた唯一のものは:

  1. キーのアクセス許可を変更する

    chmod 400 mykey.pem

  2. 必ずec2-userと正しいec2-99 ...アドレスを使用してログインしてください。ログインしてインスタンスが一覧表示されている場合、ec2-99アドレスはawsコンソールの下部にあります

    ssh -i mykey.pem ec2-user@ec2-99-99-99-99.compute-1.amazonaws.com


ec2-99アドレスが見つかりません。手伝ってくれませんか?
Adil Malik 2013

1
chmod 400 mykey.pemログイン:次のようにubuntuを使用:ssh -i mykey.pem ubuntu@SERVER.amazonaws.com
Gal Bracha

27

見てみましょうこの記事を。パブリックDNSではなく、フォームを使用します

ssh -i your.pem root@ec2-XXX-XXX-XXX-XXX.z-2.compute-1.amazonaws.com

名前がAMIパネルに表示される場所


記事の乾杯、とても便利です!
Matt Roberts、

マイナーな改善:root awsとしてログインしようとすると、次のプロンプトが表示されます:「rootユーザーではなくec2-userユーザーとしてログインしてください。」
Andre Schweighofer 2012

ec2-XXX-XXX-XXX-XXX.z-2.compute-1.amazonaws.comが何であるかを確認するにはどうすればよいですか?
アレックス

管理コンソール> EC2>インスタンスを選択し、インスタンスを選択します。
2014年

「root @」は、他のすべての人がこの回答に欠けているものです。あなたの助けて!それと、chmod。
lordB8r 2014年


13

Windowsでは、pemファイルのプロパティに移動し、[セキュリティ]タブに移動してから、[進む]ボタンに移動できます。

継承とすべての権限を削除します。次に、自分自身にフルコントロールを付与します。結局のところ、SSLによって同じエラーが再び発生することはありません。


7

私はこの質問がすでに回答されていることを知っていますが、それらすべてを試した人にとっては、迷惑な「許可が拒否されました(公開鍵)」のままです。SUDOでコマンドを実行してみてください。もちろん、これは一時的な解決策であり、権限を正しく設定する必要がありますが、少なくとも、現在のユーザーが必要な権限(想定どおり)で実行していないことを確認できます。

sudo ssh -i amazonec2.pem ec2-xxx-xxx-xxx-xxx.us-west-2.compute.amazonaws.com

これを行うと、次のようなメッセージが表示されます。

Please login as the user "ec2-user" rather than the user "root"

これもまばらに文書化されています。その場合は、次のようにします。

sudo ssh -i amazonec2.pem ec2-xxx-xxx-xxx-xxx.us-west-2.compute.amazonaws.com -l ec2-user

そしてあなたは栄光を手に入れるでしょう:

   __|  __|_  )
   _|  (     /   Amazon Linux AMI
  ___|\___|___|

2
ありがとう..上記のすべてのオプションを試してもエラーが発生しました。sudoでsshを実行するとうまくいきました。
Gursharan Singh 2017

これをsudoで実行する必要がある理由を知りたいのですが。私はchmod 400 xyz.pemを試しましたが、役に立ちませんでした。
Samuel Dominguez

6

Macターミナルでは、「chmod 400 xyz.pem」を実行しても役に立たず、許可が拒否されたと言い続けました。ubuntuユーザーのために私はお勧めします

  1. ssh-add xyz.pem
  2. ssh -i xyz.pem ubuntu@ec2-54-69-172-118.us-west-2.compute.amazonaws.com (ユーザーがubuntuであることに注意してください)

4

SSHキーとファイル権限のベストプラクティス:

  • .sshディレクトリ-0700(所有者のみ)
  • 秘密鍵/.pemファイル-0400(所有者のみ読み取り)
  • 公開鍵/.pubファイル-0600(所有者のみが読み書き可能)

    chmod XXXX file/directory


3

ssh -i /.pem user @ host-machine-IP

入力した認証情報が間違っているか、秘密鍵ではなく公開鍵を使用しているか、ポートのアクセス許可がALLからsshに開放されているためと考えられます。これはAmazonにとって悪いことです。


3

PuTTYを使用した代替ログイン。その良いが、いくつかの手順が必要です。

  1. 最初にEC2インスタンスを作成したときに生成された.pemを取得します。
  2. .pemファイルを変換して使用して.ppk PuTTYgenををパテは.PEMを読んでいないので。
  3. PuTTYを開き、インスタンスのユーザー名+パブリックDNSであるホスト名を入力します(例:ubuntu@ec2-xxx-xxx-xxx-xxx.region.compute.amazonaws.com)。AWSアカウントのユーザー名ではありません。
  4. 次に、[ 接続]> [SSH]> [認証]に移動します。次に、.ppkファイルを追加します。「認証用の秘密鍵ファイル」と表示されている場所で[ 参照]をクリックします
  5. [開く]をクリックすると、すぐに接続を確立できるはずです。

WindowsでPuTTY 0.66を使用しています。


これは機能しますが、コマンドラインから直接ssh接続を機能させる方法はありますか?
アリエル

3

他の答えに加えて、これが機能するために私がしたことは次のとおりです:

  • まだキーがない場合は、キーを.sshフォルダーにコピーします。

cp key.pem ~/.ssh/key.pem

  • キーに適切なアクセス許可を与える

chmod 400 ~/.ssh/key.pem

eval `ssh-agent -s` ssh-add

  • 次に、キーを追加します

ssh-add ~/.ssh/key.pem

これで、EC2をsshできるようになります(:


2

chmod 400 yourkeyfile.pemを実行します。インスタンスがAmazon linuxの場合、ubuntuにはssh -i yourkeyfile.pem ec2-user @ ipを使用します。centosにはssh -i yourkeyfile.pem ubuntu @ ipを使用しますssh -i yourkeyfile.pem centos @ ip


2

このエラーの原因は3つあります。

  1. 間違ったキーを使用しています。
  2. キーに適切な権限がありません。400にchmodする必要があります。
  3. 間違ったユーザーを使用しています。Ubuntuイメージにはユーザーubuntuがあり、AmazonのAMIはec2-userであり、debianイメージにはrootまたはadminがあります

2

私の問題は、.pemファイルがNTFSパーティションの1つにあることでした。Linuxパーティション(ext4)に移動しました。

次のコマンドを実行して、必要な権限を付与します。

chmod 400 my_file.pem

そしてそれはうまくいった。


2

まあ、あなたの投稿の説明を見ると、あなたが犯した2つの間違いがあったと思います:-

  1. 秘密鍵に正しい権限を設定します。以下のコマンドは、正しいファイル権限を設定するのに役立ちます。

    chmod 0600 mykey.pem

  2. ログインしようとしているec2ユーザーが間違っています

    デバッグログを見ると、Amazon linuxインスタンスが生成されていると思います。そのインスタンスタイプのデフォルトのユーザーはec2-userです。インスタンスがubuntuの場合、デフォルトのユーザーはになりますubuntu

    ssh -i privatekey.pem default_ssh_user@server_ip

Note:
   For an Amazon Linux AMI, the default user name is ec2-user.

   For a Centos AMI, the default user name is centos.

   For a Debian AMI, the default user name is admin or root.

   For a Fedora AMI, the default user name is ec2-user or fedora.

   For a RHEL AMI, the default user name is ec2-user or root.

   For a SUSE AMI, the default user name is ec2-user or root.

   For an Ubuntu AMI, the default user name is ubuntu.

   Otherwise, if ec2-user and root don't work, check with the AMI provider.

ソース:https : //docs.aws.amazon.com/AWSEC2/latest/UserGuide/AccessingInstancesLinux.html


1

チェックリスト:

  1. 適切な秘密鍵の.pemファイルを使用していますか?

  2. 権限は正しく設定されていますか?(私のAmazonブランドのAMIは644で動作しますが、Red Hatは少なくとも600または400でなければなりません。Ubuntuについては不明です。)

  3. ssh行で正しいユーザー名を使用していますか?Amazonブランド= "ec2-user"、Red Hat = "root"、Ubuntu = "ubuntu"。ユーザーは、「ssh -i pem usename @ hostname」または「ssh -l username -i pem hostname」として指定できます。


1

pemファイルの権限を0600に変更するだけで、許可されたユーザーのみが許可され、魅力のように機能します。

sudo chmod 0600 myfile.pem

そして、sshを試してみてください。

ssh -i myfile.pem <<ssh_user>>@<<server>>

1

デフォルトでは、pemキーは許可されていません。権限を変更する必要があります:

chmod 400 xyz.pem

そして、ubuntuインスタンスの場合、次を使用して接続します:

ssh -i xyz.pem ubuntu@ec2-youraws.amazonaws.com


1

キーファイルは公開しないでください。使用許可400を使用してください

chmod 400 keyfile.pem

上記のコマンドが許可エラーの使用を示している場合

sudo chmod 400 keyfile.pem

ec2マシンにSSHで接続します。それでも問題が解決しない場合は、ec2-userを使用します

ssh -i keyfile.pem ec2-user@ec2-12-34-56-78.compute-1.amazonaws.com


1

.400は、それを読み取り専用にし、所有者のみが使用できるようにすることで、それを保護します。
あなたはASWガイドから答えを見つけることができます。

chmod 400 yourPrivateKey.pem

ここに画像の説明を入力してください


0

Linuxユーザーが.pemファイルを使用してサーバーに接続するための簡単な手順は次のとおりです。

ステップ1:pemファイルの場所に移動し、それをホーム.sshの場所にコピーします。

cp example.pem ~/.ssh/example.pem

手順2:権限を変更する

chmod 400 ~/.ssh/example.pem

手順3:次のコマンドを実行します

ssh -i ~/.ssh/example.pem ec2-user@host.com

このコマンドは長すぎるため、次のコマンドを使用してこのエイリアスを作成する必要があります。

 vim ~/.bashrc

最後に同じコマンドを以下のように記述します。

alias sshConnect='ssh -i ~/.ssh/example.pem ec2-user@host.com'

ここでシステムを再起動し、を使用sshConnectしてサーバーに接続します。


0

これは、aws pemキーの権限に関する問題です。

以下のコマンドを使用して、pemキーの権限を400に変更するだけです。

chmod 400 pemkeyname.pem

ファイルの権限を変更する権限がない場合は、以下のコマンドのようにsudoを使用できます。

sudo chmod 400 pemkeyname.pem

これがうまくいくことを願っています。


0

この問題の背後にある2つの理由を見た

1)アクセスキーに適切な権限がありません。デフォルトの権限を持つPEMキーは、安全な接続を確立できません。権限を変更する必要があります:

chmod 400 xyz.pem

2)適切なユーザー資格情報でログインしているかどうかも確認してください。それ以外の場合は、接続中にsudoを使用します

sudo ssh -i {keyfile} ec2-user @ {リモートホストのIPアドレス}


0

SSHが機能するためには、キーが公開されてはなりません。必要に応じてこのコマンドを使用します。

chmod 400 Interview-apps.pem

Connect to your instance using its Public DNS:

ec2-**-***-***-***.us-west-2.compute.amazonaws.com

例:

ssh -i "Interview-apps.pem" ec2-user@ec2-**-***-***-***.us-west-2.compute.amazonaws.com

0

この回答がPermission denied (publickey)重要ではない場合は無視してください。ただし、私の経験から、最初の文字なしで(ターゲットマシンに)公開鍵を貼り付けただけで問題が発生することがわかりました。

これは、vimを使用してキーを編集(貼り付け)すると発生します。以来vimのデフォルトではで開くコマンドモード(ないで挿入モードに切り替えることなく、キーを貼り付け、)挿入モード(すなわちi)最初のスキップになりますs代わりに例えば、手紙を

ssh-rsa <key>

あなたは貼り付けてしまう

sh-rsa <key>

したがって、他の解決策を試す前に、キーを正しく貼り付けたかどうかを確認してください。すなわち

cat ~/.ssh/id_rsa.pub

確信がある場合にのみ、次の手順を実行してください。冗長モード(つまり、フラグ-v)でsshを実行しようとすると、実際の問題を指摘する可能性があります。

ssh -v -i <private_key> <name>@<ip> -p <port>

補足として、すでに他の人が言及しているように、ほとんどの場合、空のsshエージェント(キーをメモリに保持するプログラム)を起動してキーを追加すると、問題が解決します。

ssh-agent bash
ssh-add <private_key>

-1

これを修正したのは、.pemファイルをappsディレクトリ内に移動することでした。fooappが私のアプリの名前だと言ってください。そこに直接置いた。


-2

フォルダーにエラーがある場合があります。何故かはわからない...

フォルダを変更して、もう一度お試しください。たとえば、通常の(デスクトップ、ダウンロードなど)フォルダーで実験できます。

私はこの方法を試してみました


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