これはおそらく、ばかげて単純な質問です。
私は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ファイルに+600をchmodしようとしました、しかし今私がsshしたとき私はちょうど得ます:
Permission denied (publickey).
私がここで何をしているのですか? .pemファイルは私のホームフォルダ(osx内)にあります。権限は次のようになります。
-rw-------@ 1 mattroberts staff 1696 19 Nov 11:20 amazonec2.pem
問題はファイルに間違ったmodを持っていることです。
実行することで簡単に解決 -
chmod 400 mykey.pem
Amazonの指示から得た -
SSHが機能するためには、あなたの鍵ファイルを一般公開してはいけません。必要に応じてこのコマンドを使用します。chmod 400 mykey.pem
ログインに間違ったユーザー名を使用している可能性があります。
ubuntu
を持っていますec2-user
ですroot
かadmin
を持っていますログインするには、sshコマンドを調整する必要があります。
ssh -l USERNAME_HERE -i .ssh/yourkey.pem public-ec2-Host
HTH
私はこれが とても ゲームに遅れていることを知っています...しかしこれ/ 常に は私のために働きます:
ssh-add ~/.ssh/KEY_PAIR_NAME.pem
ssh user_name@<instance public dns/ip>
例えば.
ssh [email protected]
これが誰かに役立つことを願っています。
わかりました、私のために働いたのは唯一のことでした:
キーの権限を変更する
chmod 400 mykey.pem
必ず ec2-user と正しいec2-99 ...アドレスを使用してログインしてください。あなたがログインしてインスタンスがリストされているのを見ると、ec2-99アドレスはawsコンソールの一番下にあります。
ssh -i mykey.pem [email protected]
キーファイルの権限を次のように変更します。
chmod 400 key-file-name.pem
インスタンスへの接続についてはAWSのドキュメントを参照してください。
http://docs.aws.Amazon.com/AWSEC2/latest/UserGuide/EC2_GetStarted.html#EC2_ConnectToInstance_Linux
ウィンドウズでは、pemファイルのプロパティへ行き、セキュリティタブへ行き、次に進むボタンへ行きます。
継承とすべての権限を削除します。それからあなた自身にフルコントロールを与えなさい。結局、SSLはあなたに同じエラーを二度と与えないでしょう。
Mac端末では、 "chmod 400 xyz.pem"を実行しても私には役に立ちませんでした、それは許可が拒否されたと言い続けました。 Ubuntuのユーザーのために私はお勧めします
ssh-add xyz.pem
ssh -i xyz.pem [email protected]
(ユーザーがubuntuであることに注意してください)私はこの質問がすでに答えられたことを知っていますが、それらすべてを試したことがある人たちのために、あなたはまだ厄介な "Permission denied(publickey)"を得ています。 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
___|\___|___|
SSHキーとファイル許可のベストプラクティス
公開鍵/ .pubファイル - 0600(所有者だけが読み書き可能)
chmod XXXX file/directory
ssh -i /.pem user @ホストマシンIP
私はあなたが間違った資格情報を入力したか、あなたが秘密鍵ではなく公開鍵を使用しているか、あるいはあなたのポート許可がsshに対してALLに対して開かれているかのどちらかであると思います。これはAmazonには悪いことです。
PuTTYを使用した代替ログインその良いですが、いくつかの手順が必要です。
WindowsでPuTTY 0.66を使っている。
私にとっての問題は、私の.pemファイルが私のNTFSパーティションの1つにあるということでした。私はそれを私のLinuxパーティション(ext4)に移動しました。
次のコマンドを実行して必要な権限を与えます。
chmod 400 my_file.pem
そしてそれはうまくいった。
このエラーの背後にある3つの理由が考えられます。
Chmod 400 yourkeyfile.pemを実行します。インスタンスがAmazon linuxの場合、ssh -i yourkeyfile.pem ec2-user @ ip(ubuntuの場合)ssh -i yourkeyfile.pem ubuntu @ ip(centosの場合)ssh -i yourkeyfile.pem centos @ ip
鍵ファイルは一般に公開されるべきではないので、許可を使用してください。400
chmod 400 keyfile.pem
上記のコマンドがパーミッションエラーを示す場合
Sudo chmod 400 keyfile.pem
それでも問題が解決しない場合は、ec2マシンにSSHで接続します。 ec2-user を使用します。
ssh -i keyfile.pem [email protected]
許可されたユーザーのみを許可して、pemファイルの許可を0600に変更するだけで、魅力的に機能します。
Sudo chmod 0600 myfile.pem
それからsshを試してみてください。
ssh -i myfile.pem <<ssh_user>>@<<server>>
他の答えに加えて、これが機能するために私がしたことがあります。
cp key.pem ~/.ssh/key.pem
chmod 400 ~/.ssh/key.pem
eval `ssh-agent -s` ssh-add
ssh-add ~/.ssh/key.pem
これでEC2をSSHにできるはずです(:
チェックリスト:
正しい秘密鍵の.pemファイルを使用していますか?
その権限は正しく設定されていますか? (私のAmazonブランドのAMIは644で動作しますが、Red Hatは少なくとも600か400でなければなりません。Ubuntuについては知りません。)
あなたはあなたのSSHラインで正しいユーザ名を使っていますか? Amazonブランド= "ec2-user"、Red Hat = "root"、Ubuntu = "ubuntu"。ユーザーは "ssh -i pem usename @ hostname" OR "ssh -l username -i pem hostname"のように指定できます。
デフォルトでは、パーミッションはpemキーを許可していません。権限を変更するだけです。
chmod 400 xyz.pem
そして、もしubuntuインスタンスが接続しているなら:
ssh -i xyz.pem [email protected]
さて、あなたの投稿の説明を見て私はあなたによって行われた2つの間違いがあったと感じています -
秘密鍵に正しい許可を設定してください 。以下のコマンドは、正しいファイルパーミッションを設定するのに役立ちます。
chmod 0600 mykey.pem
あなたがログインしようとしている間違った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
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
以下は、Linuxユーザーが.pemファイルを使用してサーバーに接続するための簡単な手順です。
ステップ1:pemファイルの場所へ移動し、home .sshの場所へコピーする。
cp example.pem ~/.ssh/example.pem
ステップ2:権限を変更する
chmod 400 ~/.ssh/example.pem
手順3:次のコマンドを実行する
ssh -i ~/.ssh/example.pem [email protected]
このコマンドは長すぎるので、次のコマンドを使用してこれのエイリアスを作成する必要があります。
vim ~/.bashrc
最後に同じコマンドを次のように書いてください。
alias sshConnect='ssh -i ~/.ssh/example.pem [email protected]'
システムを再起動し、sshConnect
を使ってサーバーに接続します。
私はこの問題の背後にある2つの理由を見ました
1)アクセスキーに正しい権限がありません。デフォルトのアクセス権を持つPemキーは、安全な接続を確立することができません。権限を変更するだけです。
chmod 400 xyz.pem
2)また、適切なユーザー認証情報でログインしたかどうかも確認してください。それ以外の場合は、接続中にSudoを使用してください
Sudo ssh -i {キーファイル} ec2-user @ {リモートホストのIPアドレス}
それはあなたのawsのpemキーに関する単なる許可の問題です。
下記のコマンドでpem keyのパーミッションを400に変更するだけです。
chmod 400 pemkeyname.pem
ファイルの権限を変更する権限がない場合は、下記のようにSudoを使用できます。
Sudo chmod 400 pemkeyname.pem
これでうまくいくことを願っています。
これを修正したのは、.pemファイルをappsディレクトリ内に移動することでした。 fooappが私のアプリの名前だと言ってもいいでしょう。私はそれを直接そこに置いた。