diff options
author | Robey Pointer <robey@lag.net> | 2005-03-26 05:53:00 +0000 |
---|---|---|
committer | Robey Pointer <robey@lag.net> | 2005-03-26 05:53:00 +0000 |
commit | 5d8d1938fa6aa58a1b27730d8bcac8db963f4595 (patch) | |
tree | 4013ff87d56690524fa24e00415581658587cee8 /demo_windows.py | |
parent | 3e5bd84cc58fc6db485c5a188ac0ef90280b2804 (diff) |
[project @ Arch-1:robey@lag.net--2003-public%secsh--dev--1.0--patch-156]
rewrite channel pipes to work on windows
the pipe system i was using for simulating an os-level FD (for select) was
retarded. i realized this week that i could just use a single byte in the
pipe to signal "data is ready" and not try to feed all incoming data thru
the pipe -- and then i don't have to try to make the pipe non-blocking (which
should make it work on windows). a lot of duplicate code got removed and now
it's all going thru the same code-path on read.
there's still a slight penalty on incoming feeds and calling 'recv' when a
pipe has been opened (by calling 'fileno'), but it's tiny.
removed a bunch of documentation and comments about things not working on
windows, since i think they probably do now.
Diffstat (limited to 'demo_windows.py')
-rwxr-xr-x | demo_windows.py | 129 |
1 files changed, 0 insertions, 129 deletions
diff --git a/demo_windows.py b/demo_windows.py deleted file mode 100755 index f3f9f902..00000000 --- a/demo_windows.py +++ /dev/null @@ -1,129 +0,0 @@ -#!/usr/bin/python - -# Copyright (C) 2003-2005 Robey Pointer <robey@lag.net> -# -# This file is part of paramiko. -# -# Paramiko is free software; you can redistribute it and/or modify it under the -# terms of the GNU Lesser General Public License as published by the Free -# Software Foundation; either version 2.1 of the License, or (at your option) -# any later version. -# -# Paramiko is distrubuted in the hope that it will be useful, but WITHOUT ANY -# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR -# A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more -# details. -# -# You should have received a copy of the GNU Lesser General Public License -# along with Paramiko; if not, write to the Free Software Foundation, Inc., -# 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. - - -# 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 - -if os.environ.has_key('HOME'): - # unix - HOME = os.environ['HOME'] -else: - # windows - HOME = os.environ['HOMEDRIVE'] + os.environ['HOMEPATH'] - - -##### utility functions - -def load_host_keys(): - filename = 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_windows.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() - print '*** Here we go!' - print - - print '>>> ls' - chan.exec_command('ls') - 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) |