summaryrefslogtreecommitdiffhomepage
path: root/demo_windows.py
diff options
context:
space:
mode:
authorRobey Pointer <robey@lag.net>2005-03-26 05:53:00 +0000
committerRobey Pointer <robey@lag.net>2005-03-26 05:53:00 +0000
commit5d8d1938fa6aa58a1b27730d8bcac8db963f4595 (patch)
tree4013ff87d56690524fa24e00415581658587cee8 /demo_windows.py
parent3e5bd84cc58fc6db485c5a188ac0ef90280b2804 (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-xdemo_windows.py129
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)