Amazon EC2インスタンスへのSSHアクセス時にアクセスが拒否されました(公開キー)[終了]


355

Amazon ec2インスタンスを使用したいのですが、次のエラーが発生しました。

Permission denied (publickey).

キーペアを作成し、.pemファイルをダウンロードしました。

与えられた:

chmod  600 pem file.

次に、このコマンド

ssh -i /home/kashif/serverkey.pem  ubuntu@ec2-54-227-242-179.compute-1.amazonaws.com

しかし、このエラーがあります:

Permission denied (publickey)

また、filezillaに接続してファイルをアップロード/ダウンロードするにどうすればよいですか?


1
2つ目の質問については、filezillaに接続してファイルをアップロード/ダウンロードし、ステップバイステップの説明を確認してください-y2u.be/e9BDvg42-JI
Yasitha Chinthaka

2
「sudo chmod 600 pem file」を使用しなかったのですか?これはこのエラーを引き起こし、sshの前にsudoを使用する必要があることを意味します
felbus

また、一部のDebian OSでは、ユーザー名はadminです。少なくとも6.5および7.0バージョンの場合。
開発者

2
ユーザー名がの場合ec2-user、使用していないことを確認してくださいec2_user:)
grisaitis

2
ていることを確認し、ユーザあなたがキー列挙された接続しようとしているどのように彼/彼女の $HOME/.ssh/authorized_keysファイルを。
ILMostro_7

回答:


589

このエラーメッセージは、認証に失敗したことを意味します。

これらはそれを引き起こすことができる一般的な理由です:

  1. 間違ったキーで接続しようとしています。このインスタンスがこのキーペアを使用していますか?
  2. 間違ったユーザー名で接続しようとしています。ubuntuUbuntuのベースのAWSの配布のためのユーザ名があるが、いくつか他の人にそれのec2-user(またはadminいくつかのDebiansに、ボグダンKulbidaの答えによる)(もすることができrootfedora下記参照します)
  3. 間違ったホストに接続しようとしています。ログインしようとしているホストは正しいですか?

EC2インスタンスのファイル1.をめちゃくちゃにした場合にも発生することに注意し/home/<username>/.ssh/authorized_keysてください。

について2.、使用する必要があるユーザー名に関する情報がAMIイメージの説明に欠けていることがよくあります。しかし、いくつかはAWS EC2のドキュメントの箇条書きにあります4.http : //docs.aws.amazon.com/AWSEC2/latest/UserGuide/AccessingInstancesLinux.html

sshコマンドを使用してインスタンスに接続します。秘密鍵(.pem)ファイルとuser_name @ public_dns_nameを指定します。Amazon Linuxの場合、ユーザー名はec2-userです。RHEL5の場合、ユーザー名はrootまたはec2-userのいずれかです。Ubuntuの場合、ユーザー名はubuntuです。Fedoraのために、ユーザー名のいずれかであるのFedoraEC2ユーザー。SUSE Linuxの場合、ユーザー名はrootです。それ以外の場合、ec2-userおよびrootが機能しない場合は、AMIプロバイダーに確認してください。

最後に、認証が失敗する理由は他にもたくさんあることに注意してください。-vこの質問に対する他の多くの回答で説明されているように、SSHコマンドにオプションを追加して出力を読み取ろうとすると、SSHは通常、何が問題だったかについてかなり明確になります。


2
実行中のインスタンスにキーを追加するインターフェースが提供されているとは思わないので、実行中のインスタンスのキーを紛失した場合は、新しいキーを開始する必要があります。
Thibault D.

81
#2は私の問題を解決しました、ありがとう!
rckehoe 2013年

4
この答えは私のためにそれを解決しました。このインスタンスのデフォルトのユーザー名は「ubuntu」であり、AWSマニュアルで述べられているec2-userではありません。'ec2-user@_your_EC2_IP.amazonaws.com
emf

7
#1の間違ったキーについて、sshコマンドラインに-v(冗長)を追加すると、どのキーが試行されているかが示され、id_rsa以外の名前を付けていたため、生成したキーを試行していないことがわかりましたまたはid_dsa。
KC Baltz

3
「ubuntuは、ubuntuベースのAWSディストリビューションのユーザー名です」これが私に与えられたものです。ec2-userに使用されていましたが、それは常にユーザー名であると想定されていました。
Nate Reed

48

この場合、問題は鍵ペアの紛失から生じます。これについて:

  • インスタンスのキーペアを変更する方法はありません。新しいキーペアを使用する新しいインスタンスを作成する必要があります。
  • インスタンスがElastic Beanstalk上のアプリケーションで使用されている場合は、問題を回避できます。

次の手順に従ってください。

  1. AWSマネジメントコンソールへのアクセス
  2. Elastic Beanstalkタブを開く
  3. [ すべてのアプリケーション]タブからアプリケーションを選択します
  4. 左側の男性から設定を選択します
  5. インスタンスギアをクリックします
  6. ではサーバフォームチェックEC2キーペアの入力をして、新しい鍵ペアを選択します。作成したばかりの新しいキーペアを表示するには、リストを更新する必要がある場合があります。
  7. セーブ
  8. Elastic Beanstalkは、新しいキーペアに関連付けられた新しいインスタンスを作成します。

一般に、EC2インスタンスがインバウンドSSHトラフィックを受け入れることを許可する必要があることを覚えておいてください。

これを行うには、EC2インスタンスのセキュリティグループに特定のルールを作成する必要があります。次の手順に従ってください。

  1. AWSマネジメントコンソールへのアクセス
  2. EC2タブを開く
  3. [ インスタンス]リストから、目的のインスタンスを選択します
  4. [ 説明]タブで、インスタンスが使用しているセキュリティグループの名前をチェックします。
  5. もう一度[ 説明 ] タブで [ ルールの表示 ]をクリックし、セキュリティグループにポート22のインバウンドSSHトラフィックのルールがあるかどうかを確認します
  6. そうでない場合は、[ ネットワークとセキュリティ]メニューで[ セキュリティグループ ]を選択します
  7. インスタンスで使用されているセキュリティグループを選択し、[ 受信 ] タブをクリックします。
  8. [受信]タブの左側で、SSH受信トラフィックのルールを作成できます。
    • 新しいルールを作成する:SSH
    • ソース:インスタンスへのアクセス元となるIPアドレスまたはサブネットワーク
    • :インスタンスへの無制限のアクセスを許可する場合は、0.0.0.0 / 0を指定できますが、Amazonはこの方法を推奨していません
  9. [ ルールの追加]をクリックして、変更を適用します
  10. SSH経由でインスタンスに接続できるかどうかを確認します。

これが私を助けたように誰かを助けることができることを願っています。


1
答えの2番目の部分は間違っています。「アクセスが拒否されました(公開キー)」は取得できません。ファイアウォール設定(セキュリティグループ)を正しく設定していない場合。「許可が拒否されました(公開鍵)。」はSSHからのエラーメッセージであり、セキュリティグループの設定が正しいことの証明です。代わりに、「ssh:connect to host xxxx port 22:Connection refused」
Thibault D.

要するに、エラーメッセージは、この問題はセキュリティグループの構成とは何の関係もないことを示しています。
Thibault D.

あなたが正しい。2番目の部分では、別の種類の問題を扱います。ポストを直した。
Matteo Ceserani 2014年

キーを紛失した場合の解決策として考えられるのは、インスタンスのスナップショットを作成してから、新しいキーで新しいインスタンスを開始することです。その場合、Amazonは.ssh / authorized_keysに新しい公開鍵を追加するため、後で古い公開鍵を削除してください。(そして、新しいものを削除しないように注意してください。そうしないと、最初の問題に戻ります)
Thibault D.

43

これは私が問題を解決した方法です

ssh -i <key> ec2-user@<ec2 ip>

1
ここで私にとって重要なのは、ホストとIPのDNSアドレスでした。ec2-user @ <ip>がうまくいきました。
ザック

1
ソリューションも。
Tpojka 2016

26

sudo前に置いた問題を解決しました

sudo ssh -i mykey.pem myec2.amazonaws.com

しかし、適切な解決策は、まず所有権を変更してから、Janus Troelsenが以下に述べるように、通常のユーザーとして接続することです。私の場合、それは:

chown wellington:wellington key.pem

私のために働いた(しかしいくつかのパッケージを更新しなければならなかった)!
user1429980 2014

4
適切な解決策は、最初に所有権を変更してから、通常のユーザーとして接続することです。使用しますsudo chown wellington:wellington key.pem
Janus Troelsen 2014年

ルートユーザーをサポートするAmazonでVMにログインしようとしているため、
問題なく

私はwhoamiを実行してから、sudo chown user_name_given_by_whoami xxxx.pem
Chirag Purohit

23

使ってみてください

sudo ssh -i mykey.pem ubuntu@<ec2_ip_public_dns>

または

sudo ssh -i mykey.pem ec2-user@<ec2_ip_public_dns>

1
これは私を助けました。先端をありがとう!:D
jehzlau 2014年

22

このエラーの別の考えられる原因:

ユーザーのホームディレクトリがグループ書き込み可能である場合、ユーザーはログインできません。

(Ubuntuインスタンスで再現。)


1
+1 4時間前にこれを読んだらいいのに!rsync -aがec2-userフォルダーの権限を上書きしていた問題を解決しました。
マイケルホッブズ

ホームディレクトリを移動した後、ログインできませんでした。
Robert Moon

このようにして影響を受けるマシンにどのようにログインし、まったくログインできないのでしょうか。
PKHunter 2016

/ homeディレクトリのアクセス許可を修正してください。@AlexPetralia、あなたのリンクは壊れています= /しかし、これについて話しているawsフォーラムに投稿があります:forums.aws.amazon.com/message.jspa?messageID
Liko

Alex Petraliaや@Michael Hobbsのような誰かがこれに対する解決策を再投稿(または再言)できますか?
Jakub Langr

7

ubuntu 12.04 ltsマイクロインスタンスの場合、ユーザー名をオプションとして設定する必要がありました

ssh -i pemfile.pem -l ubuntu dns

これは私にとってはうまくいきました。必要な可能性のあるユーザーについて実際に議論するのがawsのドキュメントの一部ではないことに驚いています。
2014年

7

次の手順を実行する必要があります。

  1. Linuxを使用している場合は、sshクライアントまたはターミナルを開きます。
  2. 秘密鍵ファイルを見つけて、ディレクトリを変更します。
    cd <path to your .pem file>
  3. 以下のコマンドを実行します。
    chmod 400 <filename>.pem
    ssh -i <filename>.pem ubuntu@<ipaddress.com>

ubuntuユーザーが作業していない場合は、で試してくださいec2-user


5

同じ許可で苦労しましたが、明らかにエラーが拒否されました

key_parse_private2: missing begin marker 

私の状況では、原因は現在のユーザーのssh構成ファイル(〜/ .ssh / config)でした。

以下を使用します。

ssh -i ~/myKey.pem ec2-user@<IP address> -v 'exit'

最初の出力は次のとおりです。

debug1: Reading configuration data /home/ec2-user/.ssh/config
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 56: Applying options for *
debug1: Hostname has changed; re-reading configuration
debug1: Reading configuration data /home/ec2-user/.ssh/config
debug1: Reading configuration data /etc/ssh/ssh_config

...多くのデバッグ行がここでカットされます...

debug1: Next authentication method: publickey
debug1: Trying private key: /home/ec2-user/somekey.pem
debug1: key_parse_private2: missing begin marker
debug1: read PEM private key done: type RSA
debug1: Authentications that can continue: publickey
debug1: No more authentication methods to try.

上記の3行目は、実際に問題が特定された場所です。しかし、私は下から4行(上)からデバッグメッセージを探し、誤解しました。キーに問題はありませんが、テストして他の構成と比較しました。

ユーザーのssh構成ファイルは、以下に示すように、意図しないグローバル設定を介してホストをリセットしました。最初のホスト行はコメントであってはなりません。

$ cat config
StrictHostKeyChecking=no
#Host myAlias
        user ec2-user
        Hostname bitbucket.org
#        IdentityFile ~/.ssh/somekey
#        IdentitiesOnly yes

Host my2ndAlias
        user myOtherUser
        Hostname bitbucket.org
        IdentityFile ~/.ssh/my2ndKey
        IdentitiesOnly yes

他の誰かがこれが役に立ったと思います。


4

Ubuntuインスタンスに接続するときに、ユーザー名(ubuntu)を追加するのを忘れました。だから私はこれを試しました:

ssh -i /path/my-key-pair.pem my-ec2-instance.amazonaws.com

そして正しい方法は

ssh -i /path/my-key-pair.pem ubuntu@my-ec2-instance.amazonaws.com

正当な初心者エラー。ユーザー名を追加し忘れた場合は、ローカルコンピューターにログインしているユーザーのユーザー名が使用されます。
Thibault D.

3

これは私に何度も起こりました。私はAmazon Linux AMI 2013.09.2とUbuntu Server 12.04.3 LTSを使用しましたが、どちらも無料枠です。

インスタンスを起動するたびに、表示を拒否する権限があります。私はこれを検証していませんが、私の理論では、サーバーにSSH接続しようとする前にサーバーが完全にセットアップされていません。許可なしで数回の試行が拒否された後、私は数分待ってから接続できます。この問題が発生している場合は、5分待ってから再試行することをお勧めします。


5分待った。そしてそれは働いた。無料枠にもいます。感謝
Emeka Mbah

2

このエラーを引き起こす可能性のあるイライラするシナリオを次に示します。

別のインスタンス(インスタンスxyzなど)で作成したAMIから新しいインスタンスをランチする場合、新しいインスタンスは、インスタンスAが使用したのと同じキーのみを受け入れます。これは完全に理解できますが、新しいインスタンスを作成する段階的なプロセス中に、(最後のステップで)機能しないキーを選択または作成するように求められるため、混乱を招きます。

作成または選択したキーに関係なく、インスタンスXYZで使用していたキーのみが新しいインスタンスによって受け入れられます。


うわー、私はこれについて考えたことはありません。古いキーを使用して問題を解決しました。ありがとう。
tolgamorf 2014年

通常、新しい公開鍵がauthorized_keysファイルに追加されるため、両方が使用可能になります。私がテストしてからしばらく経ちましたが、それは私が起こると予想することです。
Thibault D.

2

私も次のことがわかるまで、しばらくの間これに苦労しました:

eb ssh

あなたがプロジェクトディレクトリからそれを使用するとき、ビンゴバンゴは大騒ぎせず、あなたは


2

私自身の場合、私は次のことをしました:

chmod 400 <key.pem>

ssh -i <key.pem> ec2-user@ec2_public_dns (for debian)

私は最初にroot@部品を使用していて、このプロンプトが表示されました:

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


2

私にも同じことが起こりましたが、起こっていたのは、ローカルマシンのキーチェーンから秘密鍵が失われたことです。

ssh-add -K

キーを再度追加すると、接続するsshコマンドが機能するように戻りました。


これは再起動後に毎回発生し、このための回避策を上記のコマンドを再実行する必要があります。
silentsudo 2018年

1
これを自分で確認していないが、ここで検証答えは役立つかもしれない:apple.stackexchange.com/questions/254468/...を
エイタンラビ

1

この問題は、以下のコマンドを使用してUbuntuボックスにログインすることで解決できます。

ssh -i ec2key.pem ubuntu@ec2-public-IP

1
詳細を教えてください。
Syeda Zunaira 2014

1

キーとsshコマンドラインは2回は正しいものでしたが(稼働中のUbuntu 14.04インスタンスを複製しているのでわかっています)、上記のWade Andersonの提案に従って5分待っても、新しいインスタンスにSSHで接続できませんでした。

マシンを破壊して作り直さなければなりませんでした。これは2つの別々の状況で起こりました。最初は入らないので何が悪いのかわかりません。

したがって、この問題がある場合は、それを試してください。


1

次のことを確認する必要があります。

  1. IPアドレスが正しいことを確認してください
  2. 正しいキーを使用していることを確認してください
  3. 正しいユーザー名を使用していることを確認してください。管理3.2。ec2-user 3.3。Ubuntu

同じ問題がありましたが、ユーザー名をubuntuに変更すると解決しました。AWSのドキュメントでは、ユーザーec2-userに言及しましたが、どういうわけか私にはうまくいきません。


1

私の秘密鍵は許可に設定されて400いたため、「許可が拒否されました」を「644」に設定すると役に立ちました。

key_load_private_type:拒否された権限は、私が取得していた特定のエラーです

解決: Sudo chmod 644 <key.pem>

注:644に設定する必要があります。400では機能しませんでした。


1

やってみると

ssh -i <.pem path> root@ec2-public-dns

を使用するようにアドバイスするメッセージが表示されますec2-user

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

だから使う

ssh -i <.pem path> ec2-user@ec2-public-dns


1

私は同じ問題を抱えていましたが、それは非常に奇妙です。あなたがこれを実行するよりもすべて良いことをしていると確信している場合:EC2インスタンスのユーザーについて混乱があることがあります!! ec2-user、ubuntu、centosなどが表示される場合があります。そのため、ユーザー名でmachieを確認してください。

rootユーザーでログインすると、 ssh -i yourkey.pem (400 permission) root@<ip> エラーが発生し、使用可能なユーザー名が表示されます。次に、そのユーザーでログインします。


1

基本的なことですが、ログインしようとしているユーザーを必ず確認してください。私の場合、私は単なる気晴らしでした。rootユーザーを使用しようとしました:

ssh -i ~/keys/<key_name> root@111.111.111.111

しかし、別のユーザーでした:

ssh -i ~/keys/<key_name> dedeco@111.111.111.111

1

私は同じエラーがありましたが、異なる状況でした。私にとっては、多くの時間の後にリモートコンピュータに正常にsshで接続できた後、突然発生しました。私の問題の解決策をたくさん検索した後、ファイルのアクセス許可がありました。もちろん、私は自分のコンピューターまたはsshのファイル/ディレクトリに属する​​リモートのアクセス許可を変更しなかったので、奇妙です。だから良いarchlinux wikiからここにあります:

ローカルマシンの場合は、次のようにします。

$ chmod 700 ~/
$ chmod 700 ~/.ssh
$ chmod 600 ~/.ssh/id_ecdsa

リモートマシンの場合は、次のようにします。

$ chmod 700 ~/
$ chmod 700 ~/.ssh
$ chmod 600 ~/.ssh/authorized_keys

その後、私のsshは(公開鍵)の許可なしに再び動作し始めました。


0

別の考えられる問題:間違ったログインID

「使用方法」を確認してください

上記のすべての良い提案ですが、私が遭遇したのは、事前に作成されたインスタンスを選択したことです。インスタンスが起動したら、使用方法を確認します。手順で「bitnami」を使用することになっていたときに、秘密鍵のログインIDを誤って使用しました(例:bitnami @ domain -i key.pem)


0

私は同様のエラーがありました

debug1: Authentications that can continue: publickey
debug1: Next authentication method: publickey
debug1: Trying private key: xxxx.pem
debug1: Authentications that can continue: publickey
debug1: No more authentication methods to try.
Permission denied (publickey).

私の問題は、からのrun-on-start-upスクリプトのエラーが原因でインスタンスが適切に起動しなかったことでした Step 3: Configure instance detailAdvanced details:

私が入力したと思ったこと:

#include
 https://xxxx/bootstrap.sh


実際に入力されたものはインスタンスのセットアップを壊します

#include

https://xxxx/bootstrap.sh

したがって、インスタンス側の公開鍵は作成されませんでした


0

大文字と小文字が区別されます。

誤り:SSH EC2-user @ XXX.XX.XX.XX -i MyEC2KeyPair.pem

正しい例:SSH ec2-user @ XXX.XX.XX.XX -i MyEC2KeyPair.pem


-1

あるマシンからはSSHを実行できましたが、別のマシンからはできませんでした。間違った秘密鍵を使用していたことがわかりました。

これを理解する方法は、次のように秘密鍵から公開鍵を取得することでした。

ssh-keygen -y -f ./myprivatekey.pem

出てきたものが~/.ssh/authorized_keysEC2インスタンスの内容と一致しませんでした。


-1

上記のトップランクの回答はすべて正確であり、ほとんどの場合に機能するはずです。私の場合とは異なる場合は、~/.ssh/known_hostssshを実行しようとしたマシン上のファイルを単に削除しただけで、問題は解決しました。その後接続できました。


削除するknown_hostsことで、ホストキーを変更したサーバーに接続するときの問題を解決できます(いずれにせよ、それは悪いアプローチです)が、"Permission denied(publickey)"エラーを解決できないと確信しています。
Martin Prikryl 2018
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.