web-dev-qa-db-ja.com

SSH:「そのようなアイデンティティはありません」

LinuxボックスでSSHを機能させるのに非常に特有の問題があります。 OpenSSHキーで識別されるパスワードなしのgitユーザーがいます。ネットワーク上の同じまたは異なるLinux VM)からSSHで接続しようとすると、失敗します(完全なデバッグ情報については以下を参照してください)。

しかし、今、ここに奇妙な部分があります:私はWindows 7ボックスからまったく同じキーを使用してうまくsshすることができます!これはクライアント側の問題を見ているのではないかと思います。サーバー上のキーがなんらかの理由で壊れた場合、どこからでも接続できないはずです。

私はこれで何日も泥の中で車輪を磨いてきました。この問題に関するトピックはたくさんありますが、どのソリューションも機能も適用もされていません。

私がすでに試した一般的な解決策:

  1. 〜/ .ssh権限はすべてクライアントとサーバーの両方で適切に設定されています。

    具体的には、〜/ .ssh/*が600に設定されました(1つのスレッドがauthorized_keys(サーバー)を644に変更することを推奨しましたが、効果はありませんでした)。

    〜/ .sshディレクトリ自体は700に設定されました。

    〜内のすべては、同名のユーザー/グループによって所有されています。

    クライアント(/home/kris/.ssh):

    drwx------  2 kris kris 4096 Apr 11 01:17 .
    drwx------ 38 kris kris 4096 Apr 11 01:29 ..
    -rw-------  1 kris kris  458 Apr 11 16:22 config
    -rw-------  1 kris kris 1675 Apr 10 22:29 id_rsa_kriscraig_git
    -rw-------  1 kris kris 1675 Apr 11 01:08 id_rsa_kriscraig_git_CRAIGCOM-LINUX
    -rw-------  1 kris kris  400 Apr 11 01:08 id_rsa_kriscraig_git_CRAIGCOM-LINUX.pub
    -rw-------  1 kris kris 1675 Apr 11 01:09 id_rsa_kriscraig_git_CRAIGCOM-UT3
    -rw-------  1 kris kris  400 Apr 11 01:09 id_rsa_kriscraig_git_CRAIGCOM-UT3.pub
    -rw-------  1 kris kris  951 Apr 10 22:29 id_rsa_kriscraig_gitolite_Kris
    -rw-------  1 kris kris  214 Apr 10 22:29 id_rsa_kriscraig_gitolite_Kris.pub
    -rw-------  1 kris kris  381 Apr 10 22:29 id_rsa_kriscraig_git.pub
    -rw-------  1 kris kris 1626 Apr 11 17:50 known_hosts
    

    サーバー(/home/git/.ssh;これまで行ってきたすべての試行/エラーのために少し雑然としています):

    drwx------ 2 git git 4096 Apr 11 01:36 .
    drwx------ 8 git git 4096 Apr  9 17:55 ..
    -rw-r--r-- 1 git git 2174 Apr 11 01:40 authorized_keys
    -rw------- 1 git git  904 Aug  4  2012 authorized_keys_bak
    -rw------- 1 git git  354 Aug  4  2012 authorized_keys_bak2
    -rw------- 1 git git 2174 Apr 11 01:13 authorized_keys_bak3
    -rw------- 1 git git  160 Apr 10 00:32 config
    -rw------- 1 git git 1675 Aug  3  2012 id_rsa
    -rw------- 1 git git 1675 Apr 11 01:08 id_rsa_kriscraig_git_CRAIGCOM-LINUX
    -rw------- 1 git git  400 Apr 11 01:08 id_rsa_kriscraig_git_CRAIGCOM-LINUX.pub
    -rw------- 1 git git 1675 Apr 11 01:09 id_rsa_kriscraig_git_CRAIGCOM-UT3
    -rw------- 1 git git  400 Apr 11 01:09 id_rsa_kriscraig_git_CRAIGCOM-UT3.pub
    -rw------- 1 git git  951 Apr 10 00:32 id_rsa_kriscraig_gitolite_Kris
    -rw------- 1 git git  214 Apr 10 00:33 id_rsa_kriscraig_gitolite_Kris.pub
    -rw------- 1 git git  381 Aug  3  2012 id_rsa.pub
    -rw------- 1 git git  414 Aug  4  2012 known_hosts
    
  2. これはおそらく明らかですが、実際には、構成内のファイルパスが正しいことを確認しました。

  3. 新しいキーの生成/配布を複数回試しました。

    すでにWindowsで動作しているものをコピーして貼り付けてみましたが、dos2unixを使用して、エンコードの問題(CRLF/LFなど)を処理していないことを確認しました。

    標準的なアプローチを使用してキーを生成しました。

    ssh-keygen -t rsa
    
  4. 親ホームディレクトリのアクセス許可を試してみましたが、役に立ちませんでした。

  5. ローカル設定と/ etc/ssh/* _ configをいじくり回しました

    はい、毎回sshdを再起動しました。万が一に備えて、ランダムな間隔でサーバーを再起動しました。

  6. 私は少なくともいくつかのことが欠けていると確信しています。私は最近あまり眠っていません...

    この時点で提案をします。すでに試したことが判明した場合、私はあなたに反対票を投じません。 =)

基本的なクライアント/サーバー情報

サーバ

  • CentOS 5.9 64ビット(VirtualBox)
  • 4 GB RAM
  • 200 GB HDD(動的割り当て)
  • 4つのCPU
  • ブリッジネットワーク(すべて同じルーターに接続します)
  • テスト:N/A

Linuxクライアント#1

  • CentOS 5.9 64ビット(VirtualBox)
  • 1 GB RAM
  • 15 GB HDD(動的割り当て)
  • 1 CPU
  • ブリッジドネットワーキング
  • テスト:失敗

Linuxクライアント#2

  • サーバー自体。いくつかの可能性を排除するための良い方法のように思われました。
  • テスト:失敗

Windowsクライアント

  • Windows 7 Ultimate 64ビット(VirtualBoxのホスト)
  • 32 GB RAM
  • 200 GB HDD
  • 731 GB HDD
  • 232 GB HDD
  • 465 GB HDD
  • 2.72 TB HDD
  • 16 CPU
  • テスト:成功

デバッグ情報(機密データは編集済み)

サーバ

/ var/log/secureで2回失敗したssh試行の結果のエントリ:

    Apr 11 22:21:45 CRAIGCOM-LINUX sshd[14738]: Connection from (WAN IP) port 35326
    Apr 11 22:21:45 CRAIGCOM-LINUX sshd[14739]: Connection closed by (WAN IP)
    Apr 11 22:21:52 CRAIGCOM-LINUX sshd[14741]: Connection from (WAN IP) port 35328
    Apr 11 22:21:52 CRAIGCOM-LINUX sshd[14742]: Connection closed by (WAN IP)

Linuxクライアント(基本的に両方で同じ)

    [kris@CRAIGCOM-LINUX .ssh]$ ssh git@CRAIGCOM-LINUX -vvv
    OpenSSH_4.3p2, OpenSSL 0.9.8e-fips-rhel5 01 Jul 2008
    debug1: Reading configuration data /home/kris/.ssh/config
    debug1: Applying options for CRAIGCOM-LINUX
    debug1: Reading configuration data /etc/ssh/ssh_config
    debug1: Applying options for *
    debug2: ssh_connect: needpriv 0
    debug1: Connecting to (SERVER Host) [(SERVER IP)] port 22.
    debug1: Connection established.
    debug1: identity file "/home/kris/.ssh/id_rsa_kriscraig_git_CRAIGCOM-LINUX" type -1
    debug1: loaded 1 keys
    debug1: Remote protocol version 2.0, remote software version OpenSSH_4.3
    debug1: match: OpenSSH_4.3 pat OpenSSH*
    debug1: Enabling compatibility mode for protocol 2.0
    debug1: Local version string SSH-2.0-OpenSSH_4.3
    debug2: fd 3 setting O_NONBLOCK
    debug1: SSH2_MSG_KEXINIT sent
    debug1: SSH2_MSG_KEXINIT received
    debug2: kex_parse_kexinit: diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1
    debug2: kex_parse_kexinit: ssh-rsa,ssh-dss
    debug2: kex_parse_kexinit: aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,aes192-cbc,aes256-cbc,arcfour,[email protected]
    debug2: kex_parse_kexinit: aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,aes192-cbc,aes256-cbc,arcfour,[email protected]
    debug2: kex_parse_kexinit: hmac-md5,hmac-sha1,hmac-ripemd160,[email protected],hmac-sha1-96,hmac-md5-96
    debug2: kex_parse_kexinit: hmac-md5,hmac-sha1,hmac-ripemd160,[email protected],hmac-sha1-96,hmac-md5-96
    debug2: kex_parse_kexinit: none,[email protected],zlib
    debug2: kex_parse_kexinit: none,[email protected],zlib
    debug2: kex_parse_kexinit: 
    debug2: kex_parse_kexinit: 
    debug2: kex_parse_kexinit: first_kex_follows 0 
    debug2: kex_parse_kexinit: reserved 0 
    debug2: kex_parse_kexinit: diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1
    debug2: kex_parse_kexinit: ssh-rsa,ssh-dss
    debug2: kex_parse_kexinit: aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,aes192-cbc,aes256-cbc,arcfour,[email protected]
    debug2: kex_parse_kexinit: aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,aes192-cbc,aes256-cbc,arcfour,[email protected]
    debug2: kex_parse_kexinit: hmac-md5,hmac-sha1,hmac-ripemd160,[email protected],hmac-sha1-96,hmac-md5-96
    debug2: kex_parse_kexinit: hmac-md5,hmac-sha1,hmac-ripemd160,[email protected],hmac-sha1-96,hmac-md5-96
    debug2: kex_parse_kexinit: none,[email protected]
    debug2: kex_parse_kexinit: none,[email protected]
    debug2: kex_parse_kexinit: 
    debug2: kex_parse_kexinit: 
    debug2: kex_parse_kexinit: first_kex_follows 0 
    debug2: kex_parse_kexinit: reserved 0 
    debug2: mac_init: found hmac-md5
    debug1: kex: server->client aes128-ctr hmac-md5 none
    debug2: mac_init: found hmac-md5
    debug1: kex: client->server aes128-ctr hmac-md5 none
    debug1: SSH2_MSG_KEX_DH_GEX_REQUEST(1024<1024<8192) sent
    debug1: expecting SSH2_MSG_KEX_DH_GEX_GROUP
    debug2: dh_gen_key: priv key bits set: 118/256
    debug2: bits set: 484/1024
    debug1: SSH2_MSG_KEX_DH_GEX_INIT sent
    debug1: expecting SSH2_MSG_KEX_DH_GEX_REPLY
    debug3: check_Host_in_hostfile: filename /home/kris/.ssh/known_hosts
    debug3: check_Host_in_hostfile: match line 1
    debug3: check_Host_in_hostfile: filename /home/kris/.ssh/known_hosts
    debug3: check_Host_in_hostfile: match line 1
    debug1: Host '(SERVER Host)' is known and matches the RSA Host key.
    debug1: Found key in /home/kris/.ssh/known_hosts:1
    debug2: bits set: 522/1024
    debug1: ssh_rsa_verify: signature correct
    debug2: kex_derive_keys
    debug2: set_newkeys: mode 1
    debug1: SSH2_MSG_NEWKEYS sent
    debug1: expecting SSH2_MSG_NEWKEYS
    debug2: set_newkeys: mode 0
    debug1: SSH2_MSG_NEWKEYS received
    debug1: SSH2_MSG_SERVICE_REQUEST sent
    debug2: service_accept: ssh-userauth
    debug1: SSH2_MSG_SERVICE_ACCEPT received
    debug2: key: "/home/kris/.ssh/id_rsa_kriscraig_git_CRAIGCOM-LINUX" ((nil))
    debug1: Authentications that can continue: publickey,gssapi-with-mic,password
    debug3: start over, passed a different list publickey,gssapi-with-mic,password
    debug3: preferred publickey
    debug3: authmethod_lookup publickey
    debug3: remaining preferred: 
    debug3: authmethod_is_enabled publickey
    debug1: Next authentication method: publickey
    debug1: Trying private key: "/home/kris/.ssh/id_rsa_kriscraig_git_CRAIGCOM-LINUX"
    debug3: no such identity: "/home/kris/.ssh/id_rsa_kriscraig_git_CRAIGCOM-LINUX"
    debug2: we did not send a packet, disable method
    debug1: No more authentication methods to try.
    Permission denied (publickey,gssapi-with-mic,password).

これは私が立ち往生しているところです

ログからわかるように、秘密鍵ファイルを開こうとすると、「そのようなIDはありません」が返されます。この拒否はクライアント側で起こっていると思います。私の知る限り、サーバーには何も送信していません。接続を開いて突然閉じるだけです。

私の人生では、なぜそれが両方のCentOSボックスのキーファイルでバーフィングしているのか理解できません!権限が完全に設定されている、ファイルが読み取り可能である、どちらのサーバーもSELinuxを使用していない、同じキーがWindowsクライアントから完全に正常に機能しているなど。

私はシステム管理者の帽子をかぶっています。しかし、結局のところ、私は開発者であり、IT担当者ではありません。このレベルのSSHデバッグは、私の専門分野を超えてしまいました。言いたくないのですが、アイデアが足りなくなってしまいました。私がインターネットで見つけたすべてのことによると、これは機能しているはずです。しかし、そうではありません。何が足りないのですか?

ご協力いただきありがとうございます!うまくいけば、あなたの一人がこの問題を認識し、正しい方向に私のお尻を起動します。さらに詳しい情報が必要な場合は、お気軽にお問い合わせください。

-クリス

5
Kris Craig

Ssh-agentをご利用ください。

  • まず、キーをエージェントに追加します:ssh-add ~/.ssh/$keyfile
  • 次に、キーが正常にロードされたことを確認します。ssh-add -l
  • 次に、リモートボックスにSSHで接続してみます。 (エージェントが認証を行う必要があります。)

キーに本当に問題がある場合は、キーを追加しようとすると気付くはずです。

3
michas