58 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			58 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Python
		
	
	
	
#!/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
 | 
						|
import 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 as e:
 | 
						|
        print str(e)
 | 
						|
        traceback.print_exc()
 | 
						|
        os._exit(1)
 |