diff options
author | noah <noah@656d521f-e311-0410-88e0-e7920216d269> | 2004-03-23 01:11:08 +0000 |
---|---|---|
committer | noah <noah@656d521f-e311-0410-88e0-e7920216d269> | 2004-03-23 01:11:08 +0000 |
commit | e4ff9b9fecbf2001768a70f0e05cd2a1950ea8d8 (patch) | |
tree | daf10bb5badc5d6806447efe30e50e39a148963d | |
parent | 1e047cb2583b318b0537e347faffcd954a0166e6 (diff) | |
download | pexpect-e4ff9b9fecbf2001768a70f0e05cd2a1950ea8d8.tar.gz |
sshls is more robust in login. It handles the case when ssh sees a new
public key finger print and it asks you if you are sure you want to connect.
git-svn-id: http://pexpect.svn.sourceforge.net/svnroot/pexpect/trunk@222 656d521f-e311-0410-88e0-e7920216d269
-rw-r--r-- | pexpect/examples/ssh_tunnel.py | 4 | ||||
-rwxr-xr-x | pexpect/examples/sshls.py | 33 |
2 files changed, 29 insertions, 8 deletions
diff --git a/pexpect/examples/ssh_tunnel.py b/pexpect/examples/ssh_tunnel.py index 4828a26..c9da889 100644 --- a/pexpect/examples/ssh_tunnel.py +++ b/pexpect/examples/ssh_tunnel.py @@ -44,11 +44,11 @@ def main (): print time.asctime(), print 'restarting tunnel' start_tunnel () - time.sleep (60) + time.sleep (11) print 'tunnel OK' else: # print 'tunnel OK' - time.sleep (60) + time.sleep (7) if __name__ == '__main__': main () diff --git a/pexpect/examples/sshls.py b/pexpect/examples/sshls.py index d51d499..6527a29 100755 --- a/pexpect/examples/sshls.py +++ b/pexpect/examples/sshls.py @@ -5,16 +5,37 @@ import pexpect import getpass +def ssh_command (user, host, password, command): + """This runs a command on the remote host. 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 + host = raw_input('Hostname: ') user = raw_input('User: ') password = getpass.getpass('Password: ') -child = pexpect.spawn("ssh -l %s %s /bin/ls -l"%(user, host)) - -child.expect('password:') -child.sendline(password) - +child = ssh_command (user, host, password, '/bin/ls -l') child.expect(pexpect.EOF) - print child.before |