diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-06-12 17:47:36 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-06-12 17:47:36 +0000 |
commit | 3c7813683b1845959aca706eaa23f062a006356b (patch) | |
tree | ecba42f14f0c919d94332e2633d9b0e6834c9cec /demos/demo_simple.py | |
parent | Initial commit. (diff) | |
download | paramiko-3c7813683b1845959aca706eaa23f062a006356b.tar.xz paramiko-3c7813683b1845959aca706eaa23f062a006356b.zip |
Adding upstream version 3.4.0.upstream/3.4.0upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'demos/demo_simple.py')
-rw-r--r-- | demos/demo_simple.py | 116 |
1 files changed, 116 insertions, 0 deletions
diff --git a/demos/demo_simple.py b/demos/demo_simple.py new file mode 100644 index 0000000..bd932c3 --- /dev/null +++ b/demos/demo_simple.py @@ -0,0 +1,116 @@ +#!/usr/bin/env python + +# Copyright (C) 2003-2007 Robey Pointer <robeypointer@gmail.com> +# +# This file is part of paramiko. +# +# Paramiko is free software; you can redistribute it and/or modify it under the +# terms of the GNU Lesser General Public License as published by the Free +# Software Foundation; either version 2.1 of the License, or (at your option) +# any later version. +# +# Paramiko is distributed in the hope that it will be useful, but WITHOUT ANY +# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR +# A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more +# details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with Paramiko; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + + +import base64 +import getpass +import os +import socket +import sys +import traceback +from paramiko.py3compat import input + +import paramiko + +try: + import interactive +except ImportError: + from . import interactive + + +# setup logging +paramiko.util.log_to_file("demo_simple.log") +# Paramiko client configuration +UseGSSAPI = ( + paramiko.GSS_AUTH_AVAILABLE +) # enable "gssapi-with-mic" authentication, if supported by your python installation +DoGSSAPIKeyExchange = ( + paramiko.GSS_AUTH_AVAILABLE +) # enable "gssapi-kex" key exchange, if supported by your python installation +# UseGSSAPI = False +# DoGSSAPIKeyExchange = False +port = 22 + +# get hostname +username = "" +if len(sys.argv) > 1: + hostname = sys.argv[1] + if hostname.find("@") >= 0: + username, hostname = hostname.split("@") +else: + hostname = input("Hostname: ") +if len(hostname) == 0: + print("*** Hostname required.") + sys.exit(1) + +if hostname.find(":") >= 0: + hostname, portstr = hostname.split(":") + port = int(portstr) + + +# get username +if username == "": + default_username = getpass.getuser() + username = input("Username [%s]: " % default_username) + if len(username) == 0: + username = default_username +if not UseGSSAPI and not DoGSSAPIKeyExchange: + password = getpass.getpass("Password for %s@%s: " % (username, hostname)) + + +# now, connect and use paramiko Client to negotiate SSH2 across the connection +try: + client = paramiko.SSHClient() + client.load_system_host_keys() + client.set_missing_host_key_policy(paramiko.WarningPolicy()) + print("*** Connecting...") + if not UseGSSAPI and not DoGSSAPIKeyExchange: + client.connect(hostname, port, username, password) + else: + try: + client.connect( + hostname, + port, + username, + gss_auth=UseGSSAPI, + gss_kex=DoGSSAPIKeyExchange, + ) + except Exception: + # traceback.print_exc() + password = getpass.getpass( + "Password for %s@%s: " % (username, hostname) + ) + client.connect(hostname, port, username, password) + + chan = client.invoke_shell() + print(repr(client.get_transport())) + print("*** Here we go!\n") + interactive.interactive_shell(chan) + chan.close() + client.close() + +except Exception as e: + print("*** Caught exception: %s: %s" % (e.__class__, e)) + traceback.print_exc() + try: + client.close() + except: + pass + sys.exit(1) |