summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornoah <noah@656d521f-e311-0410-88e0-e7920216d269>2004-03-23 01:11:08 +0000
committernoah <noah@656d521f-e311-0410-88e0-e7920216d269>2004-03-23 01:11:08 +0000
commite4ff9b9fecbf2001768a70f0e05cd2a1950ea8d8 (patch)
treedaf10bb5badc5d6806447efe30e50e39a148963d
parent1e047cb2583b318b0537e347faffcd954a0166e6 (diff)
downloadpexpect-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.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