aboutsummaryrefslogtreecommitdiff
path: root/third_party/Python/module/pexpect-2.4/examples/sshls.py
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/Python/module/pexpect-2.4/examples/sshls.py')
-rw-r--r--third_party/Python/module/pexpect-2.4/examples/sshls.py56
1 files changed, 56 insertions, 0 deletions
diff --git a/third_party/Python/module/pexpect-2.4/examples/sshls.py b/third_party/Python/module/pexpect-2.4/examples/sshls.py
new file mode 100644
index 000000000000..ef1ab9c23cd5
--- /dev/null
+++ b/third_party/Python/module/pexpect-2.4/examples/sshls.py
@@ -0,0 +1,56 @@
+#!/usr/bin/env python
+
+"""This runs 'ls -l' on a remote host using SSH. At the prompts enter hostname,
+user, and password.
+
+$Id: sshls.py 489 2007-11-28 23:40:34Z noah $
+"""
+
+import pexpect
+import getpass, os
+
+def ssh_command (user, host, password, command):
+
+ """This runs a command on the remote host. This could also be done with the
+pxssh class, but this demonstrates what that class does at a simpler level.
+This returns a pexpect.spawn object. This handles the case when you try to
+connect to a new host and ssh asks you if you want to accept the public key
+fingerprint and continue connecting. """
+
+ ssh_newkey = 'Are you sure you want to continue connecting'
+ child = pexpect.spawn('ssh -l %s %s %s'%(user, host, command))
+ i = child.expect([pexpect.TIMEOUT, ssh_newkey, 'password: '])
+ if i == 0: # Timeout
+ print 'ERROR!'
+ print 'SSH could not login. Here is what SSH said:'
+ print child.before, child.after
+ return None
+ if i == 1: # SSH does not have the public key. Just accept it.
+ child.sendline ('yes')
+ child.expect ('password: ')
+ i = child.expect([pexpect.TIMEOUT, 'password: '])
+ if i == 0: # Timeout
+ print 'ERROR!'
+ print 'SSH could not login. Here is what SSH said:'
+ print child.before, child.after
+ return None
+ child.sendline(password)
+ return child
+
+def main ():
+
+ host = raw_input('Hostname: ')
+ user = raw_input('User: ')
+ password = getpass.getpass('Password: ')
+ child = ssh_command (user, host, password, '/bin/ls -l')
+ child.expect(pexpect.EOF)
+ print child.before
+
+if __name__ == '__main__':
+ try:
+ main()
+ except Exception, e:
+ print str(e)
+ traceback.print_exc()
+ os._exit(1)
+