web-dev-qa-db-ja.com

公開鍵を使用したSSHログインに失敗しました

Sshdサービスを実行しているローカルホスト。 ssh-keygenを使用して、rootuser1の2組のrsaキーを作成しました。 root/.ssh/id_rsa.pubからuser1/.ssh/id_rsa.pubにコピーしました。権限を600に変更しました。ssh -l user1 localhostssh -l root localhostを試しましたが、どちらもPermission denied(publickey、keyboard-interactive)。で失敗しました。両方のユーザーの公開鍵を~/.sshフォルダにコピーする必要がありますか?構成の何が問題になっていますか? localhostに接続できないのはなぜですか?

ファイル/etc/ssh/sshd_config

RSAAuthentication yes
PubkeyAuthentication yes
PasswordAuthentication yes
UsePAM no
AllowUsers user1 root
PermitRootLogin yes

ファイル/etc/ssh/ssh_configには、コメント化されていない行があります。

   RSAAuthentication yes
   PasswordAuthentication no
   ForwardX11 no
    SendEnv LANG LC_*
    HashKnownHosts yes
    GSSAPIAuthentication yes
    GSSAPIDelegateCredentials no
   PubkeyAuthentication yes

編集1

Localhostに接続しようとしています。公開鍵のみを使用してuser1にログインできなければなりませんが、公開鍵および/またはパスワードを使用してrootとしてログインできます。


編集2

cp ~/.ssh/id_rsa.pub /home/user1/.ssh/authorized_keysをコピーしました。権限chmod -R 700 ~/.sshおよびchmod -R 700 /home/user1/.sshを変更しました。 sshd「service ssh restart」を再起動しました。しかし、それは機能していないようです。


編集4

root@ubuntu:~# ssh-copy-id user1@localhost
The authenticity of Host 'localhost (127.0.0.1)' can't be established.
ECDSA key fingerprint is 34:29:b6:1b:fe:84:eb:82:85:77:87:f6:25:39:61:5a.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'localhost' (ECDSA) to the list of known hosts.
Permission denied (publickey,keyboard-interactive).

root@ubuntu:~# ssh-copy-id root@localhost
Permission denied (publickey,keyboard-interactive).

ログ:

# tail /var/log/auth.log

... ubuntu sshd[8476]: User root not allowed because account is locked

良いSSHトラブルシューティング記事: 問題と解決策

7
J.Olufsen

SSHキーペア認証を使用し、パスワードログインをオフにしても、パスワードのないアカウントにログインしようとすると、この問題が発生しました。解決策は、私のrootアカウントを使用してパスワードを設定することでした:

passwd user1
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
7
Harm de Wit
  1. サーバーへのssh処理で問題が発生した場合は、常に-vフラグを追加することをお勧めします。

    $ ssh -v Host -l user
    
  2. 上記のどちらの場合も、公開キー(id_rsa.pub)を「リモートユーザーの.ssh/authorized_keys」ファイルに追加する必要があります。上記のケースでは、rootとuser1の両方に。これは ssh-copy-id コマンドで簡単に実行できます。

  3. /var/log/secureは、ログインが成功しなかった理由についての手掛かりを保持します。

  4. ディレクトリの権限は700 [rwx](600ではない)[rw-]である必要があります

4
rprimus

私はしばらく前に同じような問題に遭遇しました

chmod -R 600 ~/.ssh 

どうやらファイルのアクセス許可は正しいが、ディレクトリのアクセス許可が同じ種類のアクセス許可ではない場合、エラーが発生する可能性があります。

また、ファイルの名前をid_rsa.pubからauthorized_keysに変更する必要があると思います。

2
Tim Brigham

注意事項:パスワード認証を無効にしたため、パスワードでログインできません。許可されたユーザーを他のユーザーと一緒に構成する必要があると思います(一致するユーザーがおそらく前進するための最良の方法です)。また、特にrootユーザーを許可する必要があります(PermitRootLoginをyesに設定します)。

1
Peter

_/etc/ssh/sshd_config_、特にStrictModes(_grep StrictModes /etc/ssh/sshd_config_)の設定に関する詳細情報を提供することは理にかなっています。 StrictModesは、各ユーザーのそれぞれの_~/.ssh_および_~/.ssh/authorized_keys_のファイルおよびフォルダーのアクセス許可に対するsshdの反応を制御する設定です。また、_sshd_config_のAuthorizedKeysFileの設定も提供されていません。 SSHサーバーがファイルを置く場所以外の場所でファイルを探している場合は、非常に重要です。

しかし、これまでの答えは別として、これには多くの理由が考えられます。問題は、あなたが試しましたが、何が悪いのかを確実に推測するのに十分な情報がないということです。

もう1つは、PAMの制限です(UsePAM in _sshd_config_)。 Ubuntuはある時点でそれを使用していました。ユーザーアカウントにパスワードが設定されていない場合(公開キーのみの認証)、そのアカウントは許可されません。

しかし、そのような問題をデバッグするための一般的な方法を紹介しましょう。

sshdの一般的なトラブルシューティング

このような場合に一般的に非常に便利だと思うのは、デーモン化せずにsshdを起動することです(「バックグラウンドに移動して端末から切り離す」)。多くの場合、特に構成エラーが発生した場合(少なくとも明らかなケースではありません)、ログはあまり役に立ちません。

あなたはそのようなターミナルからそれを開始します:

_# $(which sshd) -Ddp 10222
_

これにより、他の方法では表示されない(_-d_がない場合)、運が良ければログに出力される、多くのデバッグ出力が得られます。

NB:$(which sshd)は、絶対パスのsshd要件を満たす最良の方法です。そうしないと、次のエラーが発生します:_sshd re-exec requires execution with an absolute path_。 _-p 10222_はsshdをその代替ポートでリッスンさせ、構成ファイルをオーバーライドします。これは、実行中のsshdインスタンスと競合しないようにするためです。 必ずここで空きポートを選択してください。

この方法は、認証の問題、パフォーマンスの問題、その他の種類の問題など、問題を見つけるのに何度も役立ちました。本当に詳細な出力をstdoutに取得するには、$(which sshd) -Ddddp 10222を使用します(詳細度を上げるためにddが追加されていることに注意してください)。デバッグの詳細については、_man sshd_を確認してください。

クライアント側では、sshは_-v_(最大_-vvv_)を取り、何をしているのかについて本当に冗長になる可能性があります。


ログ行

_... ubuntu sshd[8476]: User root not allowed because account is locked
_

それが問題であることを示唆しているので、実行してください:

_Sudo passwd -u root
_
1
0xC0000022L

CentOSでは、selinuxが認証をブロックすることがあります。コマンドを使用して問題を解決するには:

restorecon -Rv ~ /. ssh
1
Mauricio