summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--pexpect/examples/ssh_tunnel.py4
-rwxr-xr-xpexpect/examples/sshls.py33
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