web-dev-qa-db-ja.com

paramiko既存のセッション例外なし

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を再起動しようとしましたが、別のサーバーに正常に接続しました。ここを検索した後、私が見つけたのは承認の例外についての言及だけですが、ここではそうではないようです。

25
Sam Johnson

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

ssh.connect('localhost',username=name,password=pw,allow_agent=False,look_for_keys=False)
36
Prashant Borde

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

リストするには:

ssh-add -l

すべてを削除するには:

ssh-add -D

再追加するには:

ssh-add /FULL/PATH/TO/id_rsa
10
Cory Ringdahl

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

どの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
2
Rainman

クリーンなDockerコンテナーにあるため、同じエラーERROR:SSHException('No existing session',) bunが発生し、sshエージェントがありませんでした。

数時間のデバッグの後、別の解決策を見つけました。鍵交換中にタイムアウトが発生した場合に発生する可能性があります。私の場合、sshサーバーはGSMリンクを介したルーターであり、非常に遅いです。

次の方法でparamikoのデバッグを有効にできます。

logging.getLogger("paramiko").setLevel(logging.DEBUG)

また、ConnectedSwitch to new keys ...の間に例外が表示された場合は、鍵交換中にタイムアウトが発生したことを意味します。この場合、timeoutをより大きな値に設定する必要があります! (ドキュメントによるとtimeoutはTCP接続のみですが、実際には認証前のネゴシエーション全体にも使用されます!)

0
Elektordi