web-dev-qa-db-ja.com

SSHキー認証がパスワードを要求し続ける

SSHキーを使用して、ServerA(SunOS)からServerB(キーボードインタラクティブログインのあるカスタムLinux)へのアクセスを設定しようとしています。概念実証として、2つの仮想マシン間でそれを行うことができました。今私の現実のシナリオでは、それは機能していません。

ServerAでキーを作成し、ServerBにコピーしました。chmodした.sshフォルダを両方のServerA、Bで700に変更しました。

ここに私が得たもののログがあります。

    debug1: SSH2_MSG_KEXINIT sent
    debug1: SSH2_MSG_KEXINIT received
    debug1: kex: server->client aes128-ctr hmac-md5 none
    debug1: kex: client->server aes128-ctr hmac-md5 none
    debug1: Peer sent proposed langtags, ctos:
    debug1: Peer sent proposed langtags, stoc:
    debug1: We proposed langtags, ctos: en-US
    debug1: We proposed langtags, stoc: en-US
    debug1: SSH2_MSG_KEX_DH_GEX_REQUEST sent
    debug1: expecting SSH2_MSG_KEX_DH_GEX_GROUP
    debug1: dh_gen_key: priv key bits set: 125/256
    debug1: bits set: 1039/2048
    debug1: SSH2_MSG_KEX_DH_GEX_INIT sent
    debug1: expecting SSH2_MSG_KEX_DH_GEX_REPLY
    debug1: Host 'XXX.XXX.XXX.XXX' is known and matches the RSA Host key.
    debug1: Found key in /XXX/.ssh/known_hosts:1
    debug1: bits set: 1061/2048
    debug1: ssh_rsa_verify: signature correct
    debug1: newkeys: mode 1
    debug1: set_newkeys: setting new keys for 'out' mode
    debug1: SSH2_MSG_NEWKEYS sent
    debug1: expecting SSH2_MSG_NEWKEYS
    debug1: newkeys: mode 0
    debug1: set_newkeys: setting new keys for 'in' mode
    debug1: SSH2_MSG_NEWKEYS received
    debug1: done: ssh_kex2.
    debug1: send SSH2_MSG_SERVICE_REQUEST
    debug1: got SSH2_MSG_SERVICE_ACCEPT
    debug1: Authentications that can continue: publickey,keyboard-interactive
    debug1: Next authentication method: publickey
    debug1: Trying private key: /XXXX/.ssh/identity
    debug1: Trying public key: /xxx/.ssh/id_rsa
    debug1: Authentications that can continue: publickey,keyboard-interactive
    debug1: Trying private key: /xxx/.ssh/id_dsa
    debug1: Next authentication method: keyboard-interactive
    Password:
    Password:

ServerBは、独自の独自のLinuxであるため、アクションがかなり制限されています。

何が起こっているのでしょうか?

回答を編集:

問題は、sshd_config(承認された回答を参照)でこれらの設定を有効にしておらず、ServerAからServerBにキーを貼り付けるときに、キーを3つの別々の行として解釈することでした。

私がやったようにssh-copy-idを使用できない場合に備えて、キーの最初の行を「ServerB」authorized_keysファイルに最後の2文字なしで貼り付け、次に行1の欠けている文字と行2の最初の文字を入力してください。これにより、最初との間に「新しい行」が追加されなくなりますキーの2行目。 3dラインで繰り返します。

5
Rhyuk

あなたの鍵は適切にコピーされていないと思います。ssh-copy-idが利用可能な場合は、それを使用することをお勧めします。

$ ssh-copy-id user@remote_server
Password:

パスワードを入力すると、SSHキーがコピーされ、再度パスワードを入力しなくてもsshを実行できるようになります。

ServerBでSSH構成を確認し、いくつかのことを確認してください。

$ vi /etc/ssh/sshd_config

もう1つは、これらの設定を確認することです。

RSAAuthentication yes
PubKeyAuthentication yes
AuthorizedKeysFile %h/.ssh/authorized_keys

AuthorizedKeysFileの値は、公開SSHキーを貼り付ける必要がある場所です。

次を使用してSSH-Key情報を収集できます:ssh-add -L

更新済み

ssh-copy-idが存在しない場合は、古い方法で行うことができます。

$ cat ~/.ssh/id_rsa.pub | ssh user@remote_Host 'cat >> /home/user/.ssh/authorized_keys'
10
ash

デバッグログに、サーバーがプライベートRSAキーを受け入れなかったことが示されています。特定の正しい鍵ファイルを指定するか、サーバーに正しい公開鍵ファイルがあることを確認する必要があります。

@Fredrikが言ったように、ファイルのアクセス許可も役割を果たすことができます。 SSHは、他のユーザーが書き込み可能な公開キーエントリと他のユーザーが読み取り可能な秘密キーエントリの使用を拒否します。

3
Jeff Ferland

ls -l ~/.sshを使用してリモートマシン上のファイルの権限を確認し、権限を設定する必要があります。
chmod 600 ~/.ssh/authorized_keys
chmod 600 ~/.ssh/<private_key>例:chmod 600 ~/.ssh/id_rsa
chmod 700 ~/.ssh/<public_key>例:chmod 700 ~/.ssh/id_rsa.pub
chmod 700 /home/vmirea/.ssh

2
Viorel Mirea

上記に基づいて、私は問題が何であるか言うことができません。しかし、私がこれに遭遇したほとんどの場合、その理由は、(ユーザーだけでなく、グループや他のユーザーに対しても読み取り可能であるように)キーの読み取り権限が過度に設定されているためです。それは私が探し始めるところです。

2
Fredrik

これらの問題(これはある通常は権限に関連しています)は、サーバー側からはるかに簡単にデバッグできます。 /usr/sbin/sshd -d -p 2222を使用してデバッグモードで別のsshdを開始し、ポート2222で別のsshdを開始してから、クライアント側でssh -p 2222 user@sshserverを実行することをお勧めします。クライアントが認証しようとしたときにsshdから何が出てくるかを確認します。

権限の問題は/home/$USER/.sshだけである必要はありません。 //home、または/home/$USERの問題である可能性もあります。それらのいずれかがグループ書き込み可能である場合は、問題になる可能性があります。

もう1つの一般的な問題は、authorized_keysファイルのキーの途中に誤って貼り付けて改行を入れることです。

2
stew

キーを設定する最も簡単な方法は、

ssh-copy-id <remotehost>

接続するマシン(ワークステーションなど)

それはあなたのパスワードを尋ね、それからあなたのキーをコピーして適切に許可を設定するべきです。

1
Adrian Mester