30

Pythonインタラクティブシェルとローカルで実行されているopensshを使用すると、paramikoを使用して「既存のセッションがありません」という例外が発生し続けます。私のコードは以下の通りです。

import paramiko
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect('localhost',username=name,password=pw)

結果:

No handlers could be found for logger "paramiko.transport"
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python2.6/dist-packages/paramiko-1.7.7.1-py2.6.egg/paramiko/client.py", line 332, in connect
    self._auth(username, password, pkey, key_filenames, allow_agent, look_for_keys)
  File "/usr/local/lib/python2.6/dist-packages/paramiko-1.7.7.1-py2.6.egg/paramiko/client.py", line 493, in _auth
    raise saved_exception
paramiko.SSHException: No existing session

以前は接続できましたが、キーベースの認証を可能にするためにこれを調整しようとしていました。それは失敗し、それ以来、私はローカルに接続することができませんでした。opensshを再起動しようとしましたが、別のサーバーに正常に接続しました。ここを検索した後、私が見つけたのは、承認の例外についての言及だけですが、ここではそうではないようです。

4

6 に答える 6

46

すでにパスワードを持っているので、エージェントと話したり、マシンに保存されている秘密鍵を探したりする必要はありません。したがって、追加のパラメーターを渡してみてくださいallow_agent, look_for_keys:

ssh.connect('localhost',username=name,password=pw,allow_agent=False,look_for_keys=False)
于 2014-03-22T16:55:26.033 に答える
12

ssh-add リストにキー パス フレーズを含む予備の公開キーがありました。削除すると、paramiko ベースのスクリプトを適切に実行できました。

リストするには:

ssh-add -l

すべて削除するには:

ssh-add -D

再度追加するには:

ssh-add /FULL/PATH/TO/id_rsa
于 2012-10-04T20:21:23.987 に答える
3

https://bugs.launchpad.net/paramiko/+bug/912123

どのOSを使用していますか? 環境変数を確認できるかもしれません: SSH_AUTH_SOCK

「接続」の場合、ssh エージェントを使用しようとします。agent.py で

 self.conn = None
 self.keys = ()
 if ('SSH_AUTH_SOCK' in os.environ) and (sys.platform != 'win32'):
     conn = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
     try:
         conn.connect(os.environ['SSH_AUTH_SOCK'])
     except:
     # probably a dangling env var: the ssh agent is gone
         return
         self.conn = conn
 elif sys.platform == 'win32':
     import win_pageant
     if win_pageant.can_talk_to_agent():
         self.conn = win_pageant.PageantConnection()
 else:
     return
于 2012-01-06T08:51:23.483 に答える
0

私の場合、allow_agent=False,look_for_keys=False を使用してみましたが、機能しません。2G デバイスに ssh するので、timeout=10 は問題ありません。タイムアウト以外はありません。

そのため、確立されていない ssh に接続する場合は、timeout= を長時間試してください。

try:
     ssh = paramiko.SSHClient()               
        ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
                             ssh.connect(ip,22,username,passwd,timeout=10,allow_agent=True,look_for_keys=True)                     
                print ('%s\tOK\n'%(ip) )
        except socket.timeout:
                print ("%s time out"%(ip))
        except paramiko.AuthenticationException:
                print("Authentication failed, please verify your credentials: %s"%(ip))
        except paramiko.SSHException as sshException:
                print("Unable to establish SSH connection: %s" %(sshException))
        except paramiko.BadHostKeyException as badHostKeyException:
                print("Unable to verify server's host key: %s" %(badHostKeyException))
        finally:
                ssh.close()
于 2020-12-03T10:31:40.430 に答える
-6

「localhost」を「127.0.0.1」に置き換えます。

于 2011-08-08T13:45:45.190 に答える