web-dev-qa-db-ja.com

ParamikoAuthenticationExceptionの問題

Paramiko(バージョン1.7.6-2)sshクライアントを使用してデバイスに接続する際に問題が発生しました。

$ python
Python 2.6.5 (r265:79063, Apr 16 2010, 13:09:56) 
[GCC 4.4.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import paramiko
>>> ssh = paramiko.SSHClient()
>>> ssh.set_missing_Host_key_policy(paramiko.AutoAddPolicy())
>>> ssh.connect("123.0.0.1", username="root", password=None)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/pymodules/python2.6/paramiko/client.py", line 327, in connect
    self._auth(username, password, pkey, key_filenames, allow_agent, look_for_keys)
  File "/usr/lib/pymodules/python2.6/paramiko/client.py", line 481, in _auth
    raise saved_exception
paramiko.AuthenticationException: Authentication failed.
>>> 

コマンドラインからsshを使用すると、正常に機能します。

ssh [email protected]


BusyBox v1.12.1 (2010-11-03 13:18:46 EDT) built-in Shell (ash)
Enter 'help' for a list of built-in commands.

# 

これを見た人はいますか?

編集1

Sshコマンドの詳細な出力は次のとおりです。

:~$ ssh -v [email protected]
OpenSSH_5.3p1 Debian-3ubuntu4, OpenSSL 0.9.8k 25 Mar 2009
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: Applying options for *
debug1: Connecting to 123.0.0.1 [123.0.0.1] port 22.
debug1: Connection established.
debug1: identity file /home/waffleman/.ssh/identity type -1
debug1: identity file /home/waffleman/.ssh/id_rsa type -1
debug1: identity file /home/waffleman/.ssh/id_dsa type -1
debug1: Remote protocol version 2.0, remote software version OpenSSH_5.1
debug1: match: OpenSSH_5.1 pat OpenSSH*
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_5.3p1 Debian-3ubuntu4
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: SSH2_MSG_KEX_DH_GEX_REQUEST(1024<1024<8192) sent
debug1: expecting SSH2_MSG_KEX_DH_GEX_GROUP
debug1: SSH2_MSG_KEX_DH_GEX_INIT sent
debug1: expecting SSH2_MSG_KEX_DH_GEX_REPLY
debug1: Host '123.0.0.1' is known and matches the RSA Host key.
debug1: Found key in /home/waffleman/.ssh/known_hosts:3
debug1: ssh_rsa_verify: signature correct
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug1: SSH2_MSG_NEWKEYS received
debug1: SSH2_MSG_SERVICE_REQUEST sent
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug1: Authentication succeeded (none).
debug1: channel 0: new [client-session]
debug1: Requesting [email protected]
debug1: Entering interactive session.
debug1: Sending environment.
debug1: Sending env LANG = en_US.utf8

編集2これがpython出力とデバッグ出力です:

Python 2.6.5 (r265:79063, Apr 16 2010, 13:09:56) 
[GCC 4.4.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import paramiko, os
>>> paramiko.common.logging.basicConfig(level=paramiko.common.DEBUG)
>>> ssh = paramiko.SSHClient()
>>> ssh.load_system_Host_keys()
>>> ssh.load_Host_keys(os.path.expanduser('~/.ssh/known_hosts'))
>>> ssh.set_missing_Host_key_policy(paramiko.AutoAddPolicy())
>>> ssh.connect("123.0.0.1", username='root', password=None)
DEBUG:paramiko.transport:starting thread (client mode): 0x928756cL
INFO:paramiko.transport:Connected (version 2.0, client OpenSSH_5.1)
DEBUG:paramiko.transport:kex algos:['diffie-hellman-group-exchange-sha256', 'diffie-hellman-group-exchange-sha1', 'diffie-hellman-group14-sha1', 'diffie-hellman-group1-sha1'] server key:['ssh-rsa', 'ssh-dss'] client encrypt:['aes128-cbc', '3des-cbc', 'blowfish-cbc', 'cast128-cbc', 'arcfour128', 'arcfour256', 'arcfour', 'aes192-cbc', 'aes256-cbc', '[email protected]', 'aes128-ctr', 'aes192-ctr', 'aes256-ctr'] server encrypt:['aes128-cbc', '3des-cbc', 'blowfish-cbc', 'cast128-cbc', 'arcfour128', 'arcfour256', 'arcfour', 'aes192-cbc', 'aes256-cbc', '[email protected]', 'aes128-ctr', 'aes192-ctr', 'aes256-ctr'] client mac:['hmac-md5', 'hmac-sha1', '[email protected]', 'hmac-ripemd160', '[email protected]', 'hmac-sha1-96', 'hmac-md5-96'] server mac:['hmac-md5', 'hmac-sha1', '[email protected]', 'hmac-ripemd160', '[email protected]', 'hmac-sha1-96', 'hmac-md5-96'] client compress:['none', '[email protected]'] server compress:['none', '[email protected]'] client lang:[''] server lang:[''] kex follows?False
DEBUG:paramiko.transport:Ciphers agreed: local=aes128-ctr, remote=aes128-ctr
DEBUG:paramiko.transport:using kex diffie-hellman-group1-sha1; server key type ssh-rsa; cipher: local aes128-ctr, remote aes128-ctr; mac: local hmac-sha1, remote hmac-sha1; compression: local none, remote none
DEBUG:paramiko.transport:Switch to new keys ...
DEBUG:paramiko.transport:Trying discovered key b945197b1de1207d9aa0663f01888c3c in /home/waffleman/.ssh/id_rsa
DEBUG:paramiko.transport:userauth is OK
INFO:paramiko.transport:Authentication (publickey) failed.
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/pymodules/python2.6/paramiko/client.py", line 327, in connect
    self._auth(username, password, pkey, key_filenames, allow_agent, look_for_keys)
  File "/usr/lib/pymodules/python2.6/paramiko/client.py", line 481, in _auth
    raise saved_exception
paramiko.AuthenticationException: Authentication failed.
>>> 
12
waffleman

リモートデバイスのsshサーバーが認証を拒否しました。正しいキーを使用していること、公開キーが_authorized_keys_に存在すること、_.ssh_ディレクトリのアクセス許可が正しいこと、_authorized_keys_のアクセス許可が正しいこと、およびデバイスに他のアクセス許可がないことを確認してくださいアクセス制限。サーバーからのログなしで何が起こっているのかを言うのは難しいです。

[編集]出力を振り返ったところ、None認証を使用して認証しています。これは通常許可されることはなく、サーバーで許可される認証メソッドを決定するために使用されます。サーバーがホストベースの認証を使用している(またはまったく使用していない)可能性があります。

auth_none()はめったに使用されないため、SSHClientクラスからはアクセスできません。したがって、Transportを直接使用する必要があります。

_transport.auth_none('root') 
_
7
JimB

この問題に関する非常に遅いフォローアップとして、私は、限られたネットワークのコンテキストで、ワッフルマンと同じ問題に遭遇していたと思います。

Transportオブジェクトでauth_noneを使用することについてのヒントは非常に役立ちましたが、それを実装する方法について少し戸惑いました。少なくとも今日の時点では、接続するまでTransportオブジェクトのSSHClientオブジェクトを取得することはできません。しかし、そもそも接続されません...

したがって、これが他の人に役立つ場合に備えて、私の回避策は以下のとおりです。 _authメソッドをオーバーライドするだけです。

OK、これは壊れやすいです。_authは私的なものだからです。私の他の選択肢は、実際にはまだですが、手動でTransportオブジェクトとChannelオブジェクトを作成することでしたが、当面は、これらすべてを内部で行う方がはるかに良いと感じています。

from paramiko import SSHClient, BadAuthenticationType

class SSHClient_try_noauth(SSHClient):

    def _auth(self, username, *args):
        try:
            self._transport.auth_none(username)
        except BadAuthenticationType:
            super()._auth(username, *args)
5
user5417363

公開鍵ファイルと秘密鍵ファイル(および場合によってはそれを含むフォルダー)のアクセス許可が非常に制限されていることを確認してください(つまり、chmod 600 id_rsa)。これは、ファイルをsshキーとして使用するために(オペレーティングシステムによって?)必要であることがわかりました。私の親切な同僚からこれを見つけました:)また、指定されたsshキーに正しいユーザー名を使用していることを確認してください。

2
David Johnson

サーバーがAD認証を使用している場合、同様のエラーが発生します。これはparamikoのバグだと思います。 paramikoを使用する前にsshキーを設定する必要があることを学びました。

0
anibal

server側(接続先のsshd)にはさまざまな理由がある可能性があるため、クライアント側でデバッグするのは難しい場合があります。

たとえば、tail -f /var/log/secure

10月9日15:50:26pc1udatahgw04 sshd [27501]:認証が拒否されました:ディレクトリ/ home/testuserの所有権またはモードが正しくありません

ls -lad /home/testuserを実行してアクセス許可を表示すると、たとえば次のように表示されます。

$ ls -lad /home/testuser
drwxrwxr-x 16 testuser  testgroup 57344 Oct  9 15:23 /home/testuser

2番目のwビットに注意してください。グループ書き込み用にホームディレクトリが開かれました。この場合、sshdはキーベースの認証を拒否します。

ここでも、server側のsshdログオンを確認します。すでに述べたような他の問題がある可能性があります

  • /home/user/.sshディレクトリが開いています
  • /home/user/.ssh/id_rsaファイルが開いすぎています
  • /home/user/.ssh/id_rsa.pubファイルが開いすぎています
  • /home/user/.ssh/id_ecdsaファイルが開いています
  • /home/user/.ssh/id_ecdsa.pubファイルが開いすぎています

等..

0
Tagar

paramikoのSSHClientload_system_Host_keys ユーザー固有のキーのセットをロードするために使用できるメソッド。ドキュメントで説明されているように、サーバーに接続する前に実行する必要があります。

0
SilentGhost