summaryrefslogtreecommitdiffhomepage
path: root/demo_windows.py
diff options
context:
space:
mode:
authorRobey Pointer <robey@lag.net>2004-10-20 16:52:51 +0000
committerRobey Pointer <robey@lag.net>2004-10-20 16:52:51 +0000
commit6caf15b4256c969ca0e0970281d3deb21e29bb62 (patch)
treea5e0ec6608fc78fd2383d4ffdf1327bf64be109f /demo_windows.py
parent2939b6936b50d207048d9e245c202c6a7c705643 (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.py104
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)