diff options
author | Robey Pointer <robey@lag.net> | 2004-10-20 16:52:51 +0000 |
---|---|---|
committer | Robey Pointer <robey@lag.net> | 2004-10-20 16:52:51 +0000 |
commit | 6caf15b4256c969ca0e0970281d3deb21e29bb62 (patch) | |
tree | a5e0ec6608fc78fd2383d4ffdf1327bf64be109f /demo_windows.py | |
parent | 2939b6936b50d207048d9e245c202c6a7c705643 (diff) |
[project @ Arch-1:robey@lag.net--2003-public%secsh--dev--1.0--patch-94]
start testing Transport
the beginnings of tests for Transport. only the bare minimum is there right
now.
also started doc'ing things up to ivysaur.
Diffstat (limited to 'demo_windows.py')
-rw-r--r-- | demo_windows.py | 104 |
1 files changed, 104 insertions, 0 deletions
diff --git a/demo_windows.py b/demo_windows.py new file mode 100644 index 00000000..a31a6429 --- /dev/null +++ b/demo_windows.py @@ -0,0 +1,104 @@ +#!/usr/bin/python + +# This demo is like demo_simple.py, but it doesn't try to use select() +# to poll the ssh channel for reading, so it can be used on Windows. +# It logs into a shell, executes "ls", prints out the results, and +# exits. + + +import sys, os, base64, getpass, socket, traceback +import paramiko + + +##### utility functions + +def load_host_keys(): + filename = os.environ['HOME'] + '/.ssh/known_hosts' + keys = {} + try: + f = open(filename, 'r') + except Exception, e: + print '*** Unable to open host keys file (%s)' % filename + return + for line in f: + keylist = line.split(' ') + if len(keylist) != 3: + continue + hostlist, keytype, key = keylist + hosts = hostlist.split(',') + for host in hosts: + if not keys.has_key(host): + keys[host] = {} + if keytype == 'ssh-rsa': + keys[host][keytype] = paramiko.RSAKey(data=base64.decodestring(key)) + elif keytype == 'ssh-dss': + keys[host][keytype] = paramiko.DSSKey(data=base64.decodestring(key)) + f.close() + return keys + + +# setup logging +paramiko.util.log_to_file('demo.log') + +# get hostname +username = '' +if len(sys.argv) > 1: + hostname = sys.argv[1] + if hostname.find('@') >= 0: + username, hostname = hostname.split('@') +else: + hostname = raw_input('Hostname: ') +if len(hostname) == 0: + print '*** Hostname required.' + sys.exit(1) +port = 22 +if hostname.find(':') >= 0: + hostname, portstr = hostname.split(':') + port = int(portstr) + + +# get username +if username == '': + default_username = getpass.getuser() + username = raw_input('Username [%s]: ' % default_username) + if len(username) == 0: + username = default_username +password = getpass.getpass('Password for %s@%s: ' % (username, hostname)) + + +# get host key, if we know one +hostkeytype = None +hostkey = None +hkeys = load_host_keys() +if hkeys.has_key(hostname): + hostkeytype = hkeys[hostname].keys()[0] + hostkey = hkeys[hostname][hostkeytype] + print 'Using host key of type %s' % hostkeytype + + +# now, connect and use paramiko Transport to negotiate SSH2 across the connection +try: + t = paramiko.Transport((hostname, port)) + t.connect(username=username, password=password, hostkey=hostkey) + chan = t.open_session() + chan.get_pty() + print '*** Here we go!' + print + + print '>>> ls' + chan.exec_command('ps auxww') + f = chan.makefile('r+') + for line in f: + print line.strip('\n') + + chan.close() + t.close() + +except Exception, e: + print '*** Caught exception: ' + str(e.__class__) + ': ' + str(e) + traceback.print_exc() + try: + t.close() + except: + pass + sys.exit(1) |