Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
J
jumpserver
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
ops
jumpserver
Commits
988991a0
Commit
988991a0
authored
Dec 22, 2014
by
guanghongwei
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
rename jumpserver.py --> connect.py and add connect fucntion
parent
917a24e8
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
131 additions
and
59 deletions
+131
-59
connect.py
connect.py
+131
-59
No files found.
jumpserver
.py
→
connect
.py
View file @
988991a0
#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
)
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment