implemented working externAgent wrapper
[progcomp10.git] / src / link / pexpect / examples / sshls.py
diff --git a/src/link/pexpect/examples/sshls.py b/src/link/pexpect/examples/sshls.py
new file mode 100755 (executable)
index 0000000..ef1ab9c
--- /dev/null
@@ -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)
+

UCC git Repository :: git.ucc.asn.au