SSH許可が拒否されました(公開キー)


110

ローカルマシン(Ubuntu 12.04 LTSも実行)からLinode(Ubuntu 12.04 LTSを実行)に接続しようとしています

ローカルマシンで秘密鍵と公開鍵を作成し、公開鍵をLinodeのauthorized_keysファイルにコピーしました。ただし、Linodeにsshしようとすると、エラーメッセージが表示されますPermission denied (publickey)

キー認証を使用してWindowsマシンからsshを実行できるため、Linodeでのsshの設定方法に問題はありません。

私には.ssh私の地元のUbuntuマシン上のディレクトリ、私は私の持っているid_rsaし、id_rsa.pubファイルを。ローカルマシンにauthorized_keysファイルを作成する必要がありますか?

編集:これは私が実行すると得られるものですssh -vvv -i id_rsa [youruser]@[yourLinode]

debug3: authmethod_lookup publickey
debug3: remaining preferred: keyboard-interactive,password
debug3: authmethod_is_enabled publickey
debug1: Next authentication method: publickey
debug1: Offering RSA public key: id_rsa
debug3: send_pubkey_test
debug2: we sent a publickey packet, wait for reply
debug1: Authentications that can continue: publickey
debug2: we did not send a packet, disable method
debug1: No more authentication methods to try.
Permission denied (publickey).

4
1)クライアントでこのエラーが発生している時間について、SSHサーバーのログには何が記載されていますか?(/var/log/auth.log)2)どのようにして公開鍵をサーバーに転送しましたか?常にssh-copy-id許可を確認するために使用します。ホームディレクトリ、.sshディレクトリ、およびauthorized_keysファイルには厳しいアクセス許可の要件があります。(のsshd(8)のマンページを参照~/.ssh/authorized_keys)。3)Ubuntuで新しいキーペアを生成しましたか?Windowsのキーを再利用した場合-最初にOpenSSH形式に変換する必要があります。
gertvdijk

1
コマンドはすべきだったssh -vvv -i .ssh/id_rsa ....(!id_rsaとするパスに注意してください) -交換してください-古いログは、「私たちは」送るべきpubkeyではなかったことを示しています。
ガントベルト

@guntbertすでに.sshディレクトリにいたので、.sshを見逃しました。.ssh / id_rsaでも試してみましたが、同じ結果が得られました
Pattle

なるほど、私は誤解しています-@gertvdijkからの質問に答えてください。
ガントベルト

誰でもstackoverflow.com/questions/51254328/unable-to-ssh-to-bitbucketについてコメントできますか私は同様の問題を抱えています。
ムリンメイカリータ

回答:


90

PubKeyAuthentication

クライアントをセットアップする

  1. キーを生成する
    • ssh-keygen
  2. キーを使用するようにsshを構成する
    • vim ~/.ssh/config
  3. サーバーにキーをコピーします
    • ssh-copy-id -i /path/to/key.pub SERVERNAME

ステップ2の構成ファイルには、次のようなものが必要です。

Host SERVERNAME
Hostname ip-or-domain-of-server
User USERNAME
PubKeyAuthentication yes
IdentityFile ./path/to/key

認証中に他のキーファイルを使用しないIdentitiesOnly yesように追加することができますが、これは問題を引き起こす可能性があり、良い方法ではありません。sshIdentityFile

トラブルシューティング

  1. 「-vvv」オプションを使用
  2. サーバーにPUBLICキー(.pub)があることを確認してください。
  3. IdentiyFileがPRIVATEキーを指していることを確認してください。
  4. .sshディレクトリーに700があり、ファイルに700の許可(rwx ------)があることを確認してください。
  5. tail -f /var/log/auth.log (サーバー上)およびログインを試みるときのエラーを監視します
  6. 多くのキーファイルがある場合はIdentitiesOnly yes、指定された単一のキーを使用するように認証を制限してください。


1
ステップ2を詳しく説明するとIdentityFile、〜/ .ssh / configの行はPRIVATEキーを指している必要があります。
ダニーシェーマン


3
ステップ4で実行許可を持つようにファイルを設定したいのはなぜでしょうか?
トッドウォルトン

また、ユーザーごとの非常に重要な権限(chownとchmodを使用)がなければ、サーバーに公開キーがある場合でも認証が拒否されます。
joseluisq

61

問題は許可と所有権に起因する場合があります。たとえば、あなたは、rootとしてログインする場合/root.sshおよびauthorized_keysルートに属している必要があります。そうしないと、sshdはそれらを読み取ることができないため、ユーザーがログインを許可されているかどうかを判断できません。

ホームディレクトリで:

chown -R your_user:your_user .ssh

権利については、700で.ssh、600でauthorized_keys

chmod 700 .ssh
chmod 600 .ssh/authorized_keys

1
この答えは私を助けてくれました。この投稿からアドバイスを受けauthorized_keys、暗号化されたホームディレクトリの外にファイルを移動しました。そうすることで、誤って所有権をに変更しましたroot:root
ジョーダングラント

フォルダーとファイルに1回ずつ、2回投票できるといいのですが。許可が正確であることは非常に重要です。
グリーバー氏

はい、それはずっと許可でした。
a3y3

これは私の問題を解決しました、ありがとう。
sathiyarajan

14

authorized_keysクライアントには必要ありません。

生成したキーを実際に使用するようにssh-clientに指示する必要があります。それにはいくつかの方法があります。タイプをテストするためだけにssh -vvv -i .ssh/id_rsa [youruser]@[yourLinode]。サーバーに接続するたびにパスフレーズを提供する必要があります。

それはあなたがにキーを追加することができます働いた場合ssh-agentssh-add .ssh/id_rsa(あなたがこのために一度だけ、パスフレーズを提供する必要があります、それは限り、あなたはログアウトしていないように動作するはずです/リブート)


あなたの助けをありがとう、私はあなたの提案を入力すると何が起こるかを示すために私の答えを編集しました。
パトル

2
キーを転送するには、クライアント上でssh-copy-idを使用します
Panther

@ bodhi.zazenのおかげで、私はすでに鍵を転送しているが、それは問題ではありません
Pattle

4
「ssh-clientに、生成したキーを実際に使用するように指示する必要があります。」いいえ、デフォルトではデフォルトのパスでキーを探します~/.ssh/id_rsa。また、キーエージェントの使用は完全にオプションであり、私が見る限り、問題とは無関係です。
gertvdijk

@gertvdijk、あなたはここで、事実にまだ裏付けられていない仮定をしている-システム上で何が起こったのかわからない。
ガントベルト

10

PasswordAuthenticationinの値もチェック/etc/ssh/sshd_configし、それがにno変更されている場合yes。その後、sshサービスを再起動することを忘れないでください。


4
OPはパスワード認証を使用しようとはしていません。彼らはある程度の意味を持ち、公開/秘密鍵を使用しています。
ctrl-alt-delor

9

私が抱えていた問題は、クライアントで間違ったキーを使用していたことでした。id_rsaとid_rsa.pubを別の名前に変更しました。それらの名前をデフォルトに戻すか、sshコマンドを発行するときに次のように使用します。

ssh -i ~/.ssh/private_key username@host

1
いいえ、公開鍵を使用
St3an

@ St3anはサーバーに公開鍵を置きますが、Toddが上記のように接続するときは、秘密鍵を使用します
Nathan F.

@NathanFiscaletti秘密鍵を決して公開してはいけません。それが秘密である理由です。秘密鍵は、ローカルsshエージェントが、秘密鍵に対応する公開鍵を本当に提供したかどうかを確認するために使用されます。マシン間のSSHエージェントは、ユーザーがふりをすることを保証できます:-)
St3an

1
まさに。これが、接続時にssh-clientに秘密鍵を提供する理由です。サーバーは公開鍵を保存します。上記の投稿のコマンドは、秘密鍵の使用方法とまったく同じです。
ネイサンF.

7

また、(サーバー上の)ユーザーのホームディレクトリが実際にsshを実行するユーザーに属していることを確認します(この場合はroot:rootに設定されています)。

になるはずだった:

sudo chown username:username /home/username;

リモートサーバー(def@123.456.789など)のユーザーとは異なるローカルLinuxボックス(abcなど)のユーザーと公開/秘密キーでsshできます。ローカルユーザーがローカルの.sshファイル(root:abcではなくabc:abcなど)を所有していることを確認する必要がありました。`
Michael

これは私の場合
-Zerquix18

3

最近、Webサーバーでこの問題に遭遇しました。

私は通常、すべてのサーバーに承認済みキーのリストを保持しています~/.ssh/authorized_keys2。私の経験から、またはデフォルトでsshd探します。~/.ssh/authorized_keys~/.ssh/authorized_keys2

私のウェブサーバーの場合、/etc/ssh/sshd_configこの行がありました

AuthorizedKeysFile    %h/.ssh/authorized_keys

の代わりに

AuthorizedKeysFile    %h/.ssh/authorized_keys2

後者を適用し、sshデーモンを再起動し、pubkeyを使用してsshでログインする問題を解決しました。


おかげで、これはこの行が設定から完全にコメントアウトされていることを理解するのに役立ちました!
Christian.D

2

別の考えられる原因は、のAllowedUsers構成にあり/etc/ssh/sshd_confます。注:苦労して学んだように、リストはスペースで区切られています(コンマ区切りではありません)。

AllowUsers user1 user2 user3

1

他のすべてが失敗した場合は、ログインユーザーがsshのAllowedGroupに属していることを確認します。つまり、ユーザーは/etc/ssh/sshd_configサーバーの次の行に示されているグループのメンバーです。

AllowGroups ssh #Here only users of 'ssh' group can login

1

私の場合、クライアントはubuntu 14.04ltsで、サーバーはcygwinを実行している2012サーバーで勝ちました。cygwinの2012サーバーディレクトリが/ home / Administratorであったときに、「ssh administrator @ xxxx」を使用していました。したがって、大文字と小文字が区別され、「ssh Administrator @ xxxx」(Administratorの大文字のAに注意)を試してみたところ、うまくいきました。

「ユーザーが見つかりません」などのエラーメッセージが表示されると、「アクセス許可が拒否されました(publickey、keyboard-interactive)」よりもはるかに迅速にソリューションにアクセスできます。


誰かがそれを示唆しているsshプロジェクトの問題を記録する必要があります。私は同様の問題に遭遇しました。
ベンクリーシー

1

通常のユーザー(johndoeなど)の公開キーをcPanel CentosシステムからAWSのUbuntuサーバーにコピーするときにも同じ問題がありました。上記のgertvdijkが示唆したように、私はそれを確認し/var/log/auth.log、それが十分であると確信しましたAuthentication refused: bad ownership or modes for directory /home/johndoe。apache2のデフォルトの仮想ホストドキュメントルートとして/home/johndoe設定しようとしたときに間違って777 'していたことがわかりました/home/johndoe/public_html(そのタスクにも必要ありません)。

こちらこちらの回答もご覧ください

サーバーには公開鍵が必要.ssh/authorized_keysで、クライアント(作業中のコンピューター)には秘密鍵(.pem、またはFilezillaでSFTPを使用している場合は.ppk)が必要です


1

このスレッドに来た私のようなPuttyユーザーの場合、ユーザーuser @ Ipを追加するのを忘れた場合にもこのエラーが発生する可能性があります。

その他は、600へのキーファイルchmodの許可です)

ssh 1.1.1.1 -i /path/to/.pem file 
Permission denied (publickey).`

ssh user@1.1.1.1 -i /path/to/.pem file 

1

これは私のために働いたものであり、修正は私のものではありませんが、誰かが同じ問題を抱えている場合に備えて、ここに書き留めたいと思います。

元の著者はここに投稿しました:digital-ocean-public-access-key-denied

sudo nano /etc/ssh/sshd_config

これを交換してください

UsePAM yes
IgnoreUserKnownHosts no
PasswordAuthentication no

これとともに

UsePAM no
IgnoreUserKnownHosts no
PasswordAuthentication yes

ファイルを保存してsshを再起動します

reload ssh

sshはパスワードを要求するようになりました


1

質問で説明したのと同じ問題がありました。ssh -vvv -i id_rsa [youruser]@[yourLinode]クライアントマシンで実行した場合の出力は、質問で説明したものと同様でした。他の回答でアドバイスされているように、すべてのファイルとディレクトリのアクセス許可を確認しましたが、それらは正しいものでした。

これは、生成されたファイルをコピーするときにことが判明しid_rsa.pubたファイルとして、サーバー・マシンに~username/.ssh/authorized_keys私が誤って言葉を省略したいssh-rsa最初から。それを追加することで問題は解決しました。


1

Ubuntu 16.04でも動作します。

問題はsshd_configファイル内にあります

ULTIMATEソリューションは次のとおりです。

Ubuntuサーバーへのルートとしてログインします

vi /etc/ssh/sshd_config

次に、一番下に移動して、値を「no」から「yes」に変更します。

次のようになります。

noに変更して、トンネル化されたクリアテキストパスワードを無効にします。

PasswordAuthentication yes
service sshd reload

有効にするために。

これで、ローカルマシン(ラップトップなど)から次のコマンドを使用してキーを簡単に作成できます。

したがって、新しいターミナルウィンドウを開き、サーバーにログインせずに、次のコマンドを入力します。

ssh-copy-id john @ serverIPAddress

(johnをユーザー名に置き換えます)。

あなたは行くべきです


1

一部の人々は、sshアクセスをrootアカウントでのみキーとなるように設定してから、新しいユーザーを作成し、必要があることに気付いていないかもしれない

ssh root@your-ip-address

rsync --archive --chown=[user]:[user] ~/.ssh /home/[user]

logout

その後、再試行してください。[user]を新しいユーザーアカウントに置き換えます。

これは、セットアップでssh-keysを使用したときにDigitalOceanで新しいサーバーをセットアップするときによく起こります。

https://www.digitalocean.com/community/tutorials/initial-server-setup-with-ubuntu-18-04


0

私の場合、問題は.ssh古いマシンからディレクトリをコピーすることによって引き起こされました。私の古いSSHの設定は、以来されているDSAキー使用していたことが判明し、非推奨に。今回はRSAベースの新しいキーペアに切り替えると、問題が解決しました。


0

machineAとmachineBに別々にアクセスできる場合(machineCからなど)、次の方法が機能する場合があります。

ssh-copy-idが機能していない場合、パスワード認証が無効になる可能性があります。次は回避策です。

machineBの承認済みキー(つまり〜/ .ssh / authorized_keys)にmachineAの公開キーがあると、machineAからsshを実行できます。これはscpにも適用されます。

以下を使用してキーペアを生成した後: ssh-keygen

マシンA、実行cat ~/.ssh/id_rsa.pub

サンプル出力:

ssh-rsa AAAAB3NzaSGMFZW7yB anask@mahineA

印刷されたキー(⌘ Command+ C、またはCRTL+ C)をコピーし、machineBの〜/ .ssh / authorized_keysファイルに追加します。

たとえば、machineBで次を実行します。

echo 'ssh-rsa AAAAB3NzaSGMFZW7yB anask@mahineA' >> ~/.ssh/authorized_keys

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