Commit 988991a0 authored by guanghongwei's avatar guanghongwei

rename jumpserver.py --> connect.py and add connect fucntion

parent 917a24e8
#coding: utf8 #coding: utf-8
import socket import socket
import sys import sys
import os import os
import select import select
import time import time
import paramiko
try: import sys
import termios import struct
import tty import fcntl
except ImportError: import signal
print 'Only postfix supported.'
sys.exit() try:
import termios
import tty
CURRENT_DIR = os.path.abspath('.') except ImportError:
LOG_DIR = os.path.join(CURRENT_DIR, 'logs') print 'Only postfix supported.'
sys.exit()
def posix_shell(chan, user, host):
""" CURRENT_DIR = os.path.abspath('.')
Use paramiko channel connect server and logging. LOG_DIR = os.path.join(CURRENT_DIR, 'logs')
"""
today = time.strftime('%Y%m%d')
today_log_dir = os.path.join(LOG_DIR, today) def get_win_size():
time_now = time.strftime('%H%M%S') """This function use to get the size of the windows!"""
log_filename = '' if 'TIOCGWINSZ' in dir(termios):
old_tty = termios.tcgetattr(sys.stdin) TIOCGWINSZ = termios.TIOCGWINSZ
try: else:
tty.setraw(sys.stdin.fileno()) TIOCGWINSZ = 1074295912L # Assume
tty.setcbreak(sys.stdin.fileno()) s = struct.pack('HHHH', 0, 0, 0, 0)
chan.settimeout(0.0) x = fcntl.ioctl(sys.stdout.fileno(), TIOCGWINSZ, s)
return struct.unpack('HHHH', x)[0:2]
while True:
try:
r, w, e = select.select([chan, sys.stdin], [], []) def set_win_size(sig, data):
except: """This function use to set the window size of the terminal!"""
pass try:
win_size = get_win_size()
if chan in r: channel.resize_pty(height=win_size[0], width=win_size[1])
try: except:
x = chan.recv(1024) pass
if len(x) == 0:
break
sys.stdout.write(x) def posix_shell(chan, user, host):
sys.stdout.flush() """
except socket.timeout: Use paramiko channel connect server and logging.
pass """
connect_log_dir = os.path.join(LOG_DIR, 'connect')
if sys.stdin in r: today = time.strftime('%Y%m%d')
x = os.read(sys.stdin.fileno(), 1) date_now = time.strftime('%Y%m%d%H%M%S')
if len(x) == 0: today_connect_log_dir = os.path.join(connect_log_dir, today)
break log_filename = '%s_%s_%s.log' % (user, host, date_now)
chan.send(x) log_file_path = os.path.join(today_connect_log_dir, log_filename)
finally: if not os.path.isdir(today_connect_log_dir):
termios.tcsetattr(sys.stdin, termios.TCSADRAIN, old_tty) try:
os.makedirs(today_connect_log_dir)
except OSError:
print 'Create %s failed, Please modify %s permission.' % (today_connect_log_dir, connect_log_dir)
sys.exit()
try:
log = open(log_file_path, 'a')
except IOError:
print 'Create logfile failed, Please modify %s permission.' % today_connect_log_dir
sys.exit()
old_tty = termios.tcgetattr(sys.stdin)
try:
tty.setraw(sys.stdin.fileno())
tty.setcbreak(sys.stdin.fileno())
chan.settimeout(0.0)
while True:
try:
r, w, e = select.select([chan, sys.stdin], [], [])
except:
pass
if chan in r:
try:
x = chan.recv(1024)
if len(x) == 0:
break
sys.stdout.write(x)
sys.stdout.flush()
log.write(x)
log.flush()
except socket.timeout:
pass
if sys.stdin in r:
x = os.read(sys.stdin.fileno(), 1)
if len(x) == 0:
break
chan.send(x)
finally:
termios.tcsetattr(sys.stdin, termios.TCSADRAIN, old_tty)
def connect(username, password, host, port):
"""
Connect server.
"""
# Make a ssh connection
ssh = paramiko.SSHClient()
ssh.load_system_host_keys()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(host, port=port, username=username, password=password, compress=True)
# Make a channel
global channel
channel = ssh.invoke_shell()
try:
signal.signal(signal.SIGWINCH, set_win_size)
except:
pass
# Make ssh interactive tunnel
posix_shell(channel, username, host)
if __name__ == '__main__':
connect('guanghongwei', 'Lov@j1ax1n', '172.16.1.122', 2001)
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment