Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(59)

Unified Diff: third_party/pexpect/examples/ssh_tunnel.py

Issue 1398903002: Add third_party/pexpect (Closed) Base URL: https://chromium.googlesource.com/crashpad/crashpad@end-to-end-test
Patch Set: Created 5 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « third_party/pexpect/examples/script.py ('k') | third_party/pexpect/examples/table_test.html » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: third_party/pexpect/examples/ssh_tunnel.py
diff --git a/third_party/pexpect/examples/ssh_tunnel.py b/third_party/pexpect/examples/ssh_tunnel.py
new file mode 100644
index 0000000000000000000000000000000000000000..d7619118e08886eedb19a3dedf772dabd475d124
--- /dev/null
+++ b/third_party/pexpect/examples/ssh_tunnel.py
@@ -0,0 +1,105 @@
+#!/usr/bin/env python
+
+'''This starts an SSH tunnel to a given host. If the SSH process ever dies then
+this script will detect that and restart it. I use this under Cygwin to keep
+open encrypted tunnels to port 25 (SMTP), port 143 (IMAP4), and port 110
+(POP3). I set my mail client to talk to localhost and I keep this script
+running in the background.
+
+Note that this is a rather stupid script at the moment because it just looks to
+see if any ssh process is running. It should really make sure that our specific
+ssh process is running. The problem is that ssh is missing a very useful
+feature. It has no way to report the process id of the background daemon that
+it creates with the -f command. This would be a really useful script if I could
+figure a way around this problem.
+
+PEXPECT LICENSE
+
+ This license is approved by the OSI and FSF as GPL-compatible.
+ http://opensource.org/licenses/isc-license.txt
+
+ Copyright (c) 2012, Noah Spurrier <noah@noah.org>
+ PERMISSION TO USE, COPY, MODIFY, AND/OR DISTRIBUTE THIS SOFTWARE FOR ANY
+ PURPOSE WITH OR WITHOUT FEE IS HEREBY GRANTED, PROVIDED THAT THE ABOVE
+ COPYRIGHT NOTICE AND THIS PERMISSION NOTICE APPEAR IN ALL COPIES.
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+'''
+
+from __future__ import print_function
+
+from __future__ import absolute_import
+
+import pexpect
+import getpass
+import time
+
+
+try:
+ raw_input
+except NameError:
+ raw_input = input
+
+
+# SMTP:25 IMAP4:143 POP3:110
+tunnel_command = 'ssh -C -N -f -L 25:127.0.0.1:25 -L 143:127.0.0.1:143 -L 110:127.0.0.1:110 %(user)@%(host)'
+host = raw_input('Hostname: ')
+user = raw_input('Username: ')
+X = getpass.getpass('Password: ')
+
+def get_process_info ():
+
+ # This seems to work on both Linux and BSD, but should otherwise be considered highly UNportable.
+
+ ps = pexpect.run ('ps ax -O ppid')
+ pass
+
+def start_tunnel ():
+
+ try:
+ ssh_tunnel = pexpect.spawn (tunnel_command % globals())
+ ssh_tunnel.expect ('password:')
+ time.sleep (0.1)
+ ssh_tunnel.sendline (X)
+ time.sleep (60) # Cygwin is slow to update process status.
+ ssh_tunnel.expect (pexpect.EOF)
+
+ except Exception as e:
+ print(str(e))
+
+def main ():
+
+ while True:
+ ps = pexpect.spawn ('ps')
+ time.sleep (1)
+ index = ps.expect (['/usr/bin/ssh', pexpect.EOF, pexpect.TIMEOUT])
+ if index == 2:
+ print('TIMEOUT in ps command...')
+ print(str(ps))
+ time.sleep (13)
+ if index == 1:
+ print(time.asctime(), end=' ')
+ print('restarting tunnel')
+ start_tunnel ()
+ time.sleep (11)
+ print('tunnel OK')
+ else:
+ # print 'tunnel OK'
+ time.sleep (7)
+
+if __name__ == '__main__':
+
+ main ()
+
+# This was for older SSH versions that didn't have -f option
+#tunnel_command = 'ssh -C -n -L 25:%(host)s:25 -L 110:%(host)s:110 %(user)s@%(host)s -f nothing.sh'
+#nothing_script = '''#!/bin/sh
+#while true; do sleep 53; done
+#'''
+
« no previous file with comments | « third_party/pexpect/examples/script.py ('k') | third_party/pexpect/examples/table_test.html » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698