I've tried to post to the mailing list for paramiko and contact the author, but it seems he's having some mailing list problems. Anyways, I have this small example that works just fine on Windows against Python 2.6.2, but fails on Ubuntu against 2.6.2. Here is the code:
import subprocess import os import re import paramiko import sqlite3 import datetime import base64 import sys import logging from paramiko.rsakey import RSAKey class OpenSessions: sshconns = [] sqlconn = sqlite3.connect('test.sqlite') def __init__(self): self.sqlconn.row_factory = sqlite3.Row sqlcur = self.sqlconn.cursor() sqlcur.execute("select host, pub_key, username, password, private_key from ssh_hosts") rows = sqlcur.fetchall() for row in rows: sshconn = paramiko.SSHClient() sshconn._system_host_keys.add(row["host"], "ssh-rsa", RSAKey (data=base64.decodestring(row["pub_key"]))) if row["private_key"] != "": sshconn.connect(hostname=row["host"], username=row["username"], pkey=RSAKey(data=base64.decodestring(row["private_key"]))) elif row["password"] != "": sshconn.connect(hostname=row["host"], username=row["username"], password=row["password"], look_for_keys=False, timeout=60) self.sshconns.append(sshconn) output = "" for conn in self.sshconns: print conn.exec_command("uname -a")[1].readline() exit() if __name__== '__main__': sessions = OpenSessions() The code fails with this trace: Traceback (most recent call last): File "test.py", line 41, in <module> sessions = OpenSessions() File "test.py", line 36, in __init__ print chan.exec_command("uname -a")[1].readline() File "/usr/local/lib/python2.6/dist-packages/paramiko/channel.py", line 212, in exec_command self._wait_for_event() File "/usr/local/lib/python2.6/dist-packages/paramiko/channel.py", line 1077, in _wait_for_event raise e paramiko.SSHException: Channel closed. Exception in thread Thread-1 (most likely raised during interpreter shutdown): Traceback (most recent call last): File "/usr/lib/python2.6/threading.py", line 525, in __bootstrap_inner File "/usr/local/lib/python2.6/dist-packages/paramiko/transport.py", line 1567, in run <type 'exceptions.AttributeError'>: 'NoneType' object has no attribute 'error' This well beyond my abilities to debug. All I know is that it always works on Windows, and always fails in Ubuntu (which of course is where I need use the code). Any suggestions? I know the paramiko mailing list would probably be the better spot for this, but like I said, its got some issues right now. OLIVER -- http://mail.python.org/mailman/listinfo/python-list