web-dev-qa-db-ja.com

ローカルUbuntuからAmazon EC2サーバーにSSHで接続しようとすると、「アクセスが拒否されました(公開キー)」になるのはなぜですか?

Amazon EC2インスタンスのクラウドで実行されているアプリケーションのインスタンスがあり、ローカルのUbuntuから接続する必要があります。ローカルubuntuとラップトップのいずれでも問題なく動作します。別のローカルUbuntuでEC2へのSSHにアクセスしようとすると、「Permission denied(publickey)」というメッセージが表示されました。それは私にはとても奇妙です。

1つのインスタンスまたは証明書へのIPアクセスが制限されているAmazon EC2のセキュリティ設定にある種の問題を再生成する必要があると考えています。

誰かが解決策を知っていますか?

217
Vorleak Chy

この状況で最初にすることは、-vオプションをsshに追加すると、試行された認証のタイプと結果が表示されます。それは状況を啓発するのに役立ちますか?

質問の更新では、「別のローカルUbuntuについて」と述べています。 ssh秘密鍵を他のマシンにコピーしましたか?

143
Greg Hewgill

明示的に言及されていないので、sshdはデフォルトでauthorized_keysファイルのアクセス許可に非常に厳格です。したがって、authorized_keys書き込み可能ユーザー以外のユーザーの場合、または書き込み可能にすることができますユーザー以外のユーザーが作成した場合、認証は拒否されます(ただし、 sshdはStrictModes noで構成されています)

「書き込み可能にできる」とは、親ディレクトリのいずれかがユーザー以外の誰かに書き込み可能である場合、それらのディレクトリの変更を許可されたユーザーは、authorized_keysを変更/置換できるように権限の変更を開始できるということです。

さらに、/home/username/.sshディレクトリがユーザーによって所有されておらず、ユーザーにキーを読み取る権限がない場合は、問題が発生する可能性があります。

drwxr-xr-x 7 jane jane 4096 Jan 22 02:10 /home/jane
drwx------ 2 root root 4096 Jan 22 03:28 /home/jane/.ssh

Janeは.sshファイルを所有していないことに注意してください。これを修正する

chown -R jane:jane /home/jane/.ssh

これらの種類のファイルシステム権限の問題はssh -vでは発生せず、ログレベルをDEBUGに設定するまで、sshdログ(!)で発生することはありません。

  • /etc/ssh/sshd_configを編集します。どこかでLogLevel DEBUGを読み取る行が必要です。ディストリビューションが提供するメカニズムを使用してSSHサーバーをリロードします。 (RHEL/CentOS/Scientificではservice sshd reload)。正常なリロードでは既存のセッションはドロップされません。
  • もう一度認証してみてください。
  • 認証機能のログがどこに行くかを調べ、それらを読み取ります。 (IIRC、Debianベースのディストリビューションでは/var/log/auth.log、RHEL/CentOS/Scientificでは/var/log/secure)。

ファイルシステムのアクセス許可エラーを含むデバッグ出力で何が問題になっているのかをはるかに簡単に把握できます。完了したら、変更を/etc/ssh/sshd_configに戻すことを忘れないでください!

76

-lオプションを追加するのを忘れたため、このエラーを受け取りました。私のローカルユーザー名は、リモートシステムのものと同じではありませんでした。

これはあなたの質問には答えませんが、私の問題の答えを探してここに来ました。

37
pkmk

Ubuntu AMIに基づいていない新しいインスタンスでこのメッセージを受け取りました。 PEMを提供するために-iオプションを使用していましたが、「Permission denied(publickey)」がまだ表示されていました。

私の問題は、正しいユーザーを使用していないことでした。 ubuntu @ ec2でsshを実行することで、通常のように動作しました。

19
user60587

ssh -v(もちろん私の意見では)より読みやすいのはtail -f /var/log/auth.logです。これは、接続を試みている間、接続しようとしているサーバーで実行する必要があります。エラーはプレーンテキストで表示されます。

これは私の問題を解決するのに役立ちました:

ユーザーのグループがAllowGroupsにリストされていないため、xx.yy.comのユーザー[username]は許可されません

16
Znarkus

/ etc/ssh/sshd_configファイルを確認します。そこに、言う行を見つけます

PasswordAuthentication no

その行を変更して、「いいえ」ではなく「はい」と言う必要があります。また、後でsshdサーバーを再起動します。

Sudo /etc/init.d/ssh restart
10

おそらく現在のポスターには関係ないかもしれませんが、同様の状況への回答を探すときにこれを見つけた他の人を助けるかもしれません。 Amazonにssh鍵ペアを生成させる代わりに、独自の標準のデフォルトの公開ssh鍵をAmazonにアップロードし、EC2インスタンスを実行するときにそれを指定することをお勧めします。

これにより、sshで「-i」タイプの構文を削除し、標準オプションでrsyncを使用し、すべてのEC2リージョンで同じsshキーを使用できます。

私はこのプロセスについての記事をここに書きました:

個人のsshキーをAmazon EC2にアップロードする
http://alestic.com/2010/10/ec2-ssh-keys

6
Eric Hammond

不思議なことに、私の問題は、サーバーが再起動され、新しいDNS名が発行されたことであることがわかりました。古いDNS名を使用していました。馬鹿げているように聞こえるかもしれませんが、理解するのにしばらく時間がかかりました。

5
Patrick Collins

Dropbearを実行しているCyanogenMod電話に接続しようとしている場合は、次の行を実行して、すべてが許可されていることを確認してください。

chmod 600 /data/dropbear/.ssh/authorized_keys

または

chmod 700 /data/dropbear/.ssh/authorized_keys # In case of MacOS X 10.6-10.8

そして

chmod 755 /data/dropbear/ /data/dropbear/.ssh

これは私のためにそれを修正しました、そうでなければ何も接続できません。

2
Naftuli Kay

CentOS 5を使用している場合は、StrictModes no/etc/ssh/sshd_configを設定できます。 NIS/NFSを使用して/ homeディレクトリを共有しています。すべての権限を正しく設定していますが、常にパスワードの入力を求められます。 StrictModes noを設定すると、問題が解決しました。

2
uichin

私はおそらくすべての手順を実行していたにもかかわらず、同じ問題を抱えていました

$ ec2-authorize default -p 22

ただし、私はus-west-1リージョンでインスタンスを開始しました。したがって、上記のコマンドでもそれを指定する必要があります。

$ ec2-authorize default -p 22 --region us-west-1

このコマンドの後、インスタンスにsshできました。私は問題に気付く前に少し過ごしましたが、この投稿が他の人に役立つことを願っています。

1
Ajit Verma

グレッグの答えはそれをよりよくトラブルシューティングする方法を説明していますが、実際の問題は、パスワードベースの認証ではなく公開キー認証を試みるトランザクションの片側(クライアント)にsshキーが設定されていることです。 EC2インスタンスに対応する公開鍵がないため、これは機能しません。

1
Cian

私は同じ問題を抱えていて、うまくいかない大量の解決策を試した後、ルーターのファイアウォールでSSHポートを開きました(私のルーターのファイアウォールコントロールパネルは混乱しているので、何が起こっているのかわかりません)。とにかく、それはそれを修正しました:)

Super表示されるエラーがPermission Deniedであることにうんざりしていて、何らかの接続が行われたことを示していますgrr。

1
chichilatte

ユーザーのホームディレクトリにグループの書き込み権限を誤って追加した後、同じ問題が発生しました。

マシンでtail -f /var/log/secureを実行してエラーAuthentication refused: bad ownership or modes for directory /home/<username>が表示され、これが原因であることがわかりました。

0
Jacob Tomlinson

これはまれなケースですが、selinuxを有効にして、authorized_keysを持つディレクトリ(共有ホームディレクトリなど)にnfsを使用している場合は、selinuxを無効にする必要があります(セキュリティ上の理由からお勧めしませんが、一時的に無効にできます)これが問題の原因であるかどうかを確認する)、またはselinuxがnfsホームディレクトリを使用できるようにします。詳細は不明ですが、これでうまくいきましたsetsebool -P use_nfs_home_dirs 1

0
Reese