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
import sys
import struct
import fcntl
import signal
try: try:
import termios import termios
...@@ -18,14 +23,50 @@ CURRENT_DIR = os.path.abspath('.') ...@@ -18,14 +23,50 @@ CURRENT_DIR = os.path.abspath('.')
LOG_DIR = os.path.join(CURRENT_DIR, 'logs') LOG_DIR = os.path.join(CURRENT_DIR, 'logs')
def get_win_size():
"""This function use to get the size of the windows!"""
if 'TIOCGWINSZ' in dir(termios):
TIOCGWINSZ = termios.TIOCGWINSZ
else:
TIOCGWINSZ = 1074295912L # Assume
s = struct.pack('HHHH', 0, 0, 0, 0)
x = fcntl.ioctl(sys.stdout.fileno(), TIOCGWINSZ, s)
return struct.unpack('HHHH', x)[0:2]
def set_win_size(sig, data):
"""This function use to set the window size of the terminal!"""
try:
win_size = get_win_size()
channel.resize_pty(height=win_size[0], width=win_size[1])
except:
pass
def posix_shell(chan, user, host): def posix_shell(chan, user, host):
""" """
Use paramiko channel connect server and logging. Use paramiko channel connect server and logging.
""" """
connect_log_dir = os.path.join(LOG_DIR, 'connect')
today = time.strftime('%Y%m%d') today = time.strftime('%Y%m%d')
today_log_dir = os.path.join(LOG_DIR, today) date_now = time.strftime('%Y%m%d%H%M%S')
time_now = time.strftime('%H%M%S') today_connect_log_dir = os.path.join(connect_log_dir, today)
log_filename = '' log_filename = '%s_%s_%s.log' % (user, host, date_now)
log_file_path = os.path.join(today_connect_log_dir, log_filename)
if not os.path.isdir(today_connect_log_dir):
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) old_tty = termios.tcgetattr(sys.stdin)
try: try:
tty.setraw(sys.stdin.fileno()) tty.setraw(sys.stdin.fileno())
...@@ -45,6 +86,8 @@ def posix_shell(chan, user, host): ...@@ -45,6 +86,8 @@ def posix_shell(chan, user, host):
break break
sys.stdout.write(x) sys.stdout.write(x)
sys.stdout.flush() sys.stdout.flush()
log.write(x)
log.flush()
except socket.timeout: except socket.timeout:
pass pass
...@@ -57,3 +100,32 @@ def posix_shell(chan, user, host): ...@@ -57,3 +100,32 @@ def posix_shell(chan, user, host):
finally: finally:
termios.tcsetattr(sys.stdin, termios.TCSADRAIN, old_tty) 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