Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
C
coco
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
coco
Commits
801a1e84
Commit
801a1e84
authored
Jan 14, 2018
by
ibuler
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[Bugfix] 修复组越界异常和ssh key问题
parent
45a9193a
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
28 additions
and
18 deletions
+28
-18
interactive.py
coco/interactive.py
+7
-2
proxy.py
coco/proxy.py
+11
-4
utils.py
coco/utils.py
+9
-4
logo.txt
logo.txt
+1
-8
No files found.
coco/interactive.py
View file @
801a1e84
...
...
@@ -173,12 +173,17 @@ class InteractiveServer:
line
=
header
+
'{0.comment:
%
s}'
%
(
comment_length
//
2
)
# comment中可能有中文
header
+=
"{0.comment:
%
s}"
%
comment_length
self
.
client
.
send
(
title
(
header
.
format
(
fake_group
,
"ID"
)))
for
index
,
group
in
enumerate
(
self
.
asset_groups
):
for
index
,
group
in
enumerate
(
self
.
asset_groups
,
1
):
self
.
client
.
send
(
wr
(
line
.
format
(
group
,
index
)))
self
.
client
.
send
(
wr
(
_
(
"Total: {}"
)
.
format
(
len
(
self
.
asset_groups
)),
before
=
1
))
def
display_group_assets
(
self
,
_id
):
self
.
search_result
=
self
.
asset_groups
[
_id
]
.
assets_granted
if
_id
>
len
(
self
.
asset_groups
)
or
_id
<=
0
:
self
.
client
.
send
(
wr
(
warning
(
"Not match group, select again"
)))
self
.
display_asset_groups
()
return
self
.
search_result
=
self
.
asset_groups
[
_id
-
1
]
.
assets_granted
self
.
display_search_result
()
def
display_search_result
(
self
):
...
...
coco/proxy.py
View file @
801a1e84
...
...
@@ -12,7 +12,8 @@ import paramiko
from
.session
import
Session
from
.models
import
Server
from
.utils
import
wrap_with_line_feed
as
wr
,
wrap_with_warning
as
warning
from
.utils
import
wrap_with_line_feed
as
wr
,
wrap_with_warning
as
warning
,
\
get_private_key_fingerprint
logger
=
logging
.
getLogger
(
__file__
)
...
...
@@ -92,16 +93,22 @@ class ProxyServer:
timeout
=
TIMEOUT
,
compress
=
True
,
auth_timeout
=
10
,
look_for_keys
=
False
)
except
paramiko
.
AuthenticationException
:
except
(
paramiko
.
AuthenticationException
,
paramiko
.
BadAuthenticationType
)
:
admins
=
self
.
app
.
config
[
'ADMINS'
]
or
'administrator'
self
.
client
.
send
(
warning
(
wr
(
"Authenticate with server failed, contact {}"
.
format
(
admins
),
before
=
1
,
after
=
0
)))
key_fingerprint
=
system_user
.
private_key
.
get_hex
()
if
system_user
.
private_key
else
None
password_short
=
"None"
key_fingerprint
=
"None"
if
system_user
.
password
:
password_short
=
system_user
.
password
[:
5
]
+
(
len
(
system_user
.
password
)
-
5
)
*
'*'
if
system_user
.
private_key
:
key_fingerprint
=
get_private_key_fingerprint
(
system_user
.
private_key
)
logger
.
error
(
"Connect {}@{}:{} auth failed, password: {}, key: {}"
.
format
(
system_user
.
username
,
asset
.
ip
,
asset
.
port
,
system_user
.
password
,
key_fingerprint
,
password_short
,
key_fingerprint
,
))
return
None
except
socket
.
error
as
e
:
...
...
coco/utils.py
View file @
801a1e84
...
...
@@ -14,6 +14,7 @@ import time
import
datetime
import
gettext
from
io
import
StringIO
from
binascii
import
hexlify
import
paramiko
import
pyte
...
...
@@ -26,16 +27,15 @@ from .exception import NoAppException
BASE_DIR
=
os
.
path
.
abspath
(
os
.
path
.
dirname
(
os
.
path
.
dirname
(
__file__
)))
def
ssh_key_string_to_obj
(
text
):
key_f
=
StringIO
(
text
)
def
ssh_key_string_to_obj
(
text
,
password
=
None
):
key
=
None
try
:
key
=
paramiko
.
RSAKey
.
from_private_key
(
key_f
)
key
=
paramiko
.
RSAKey
.
from_private_key
(
StringIO
(
text
),
password
=
password
)
except
paramiko
.
SSHException
:
pass
try
:
key
=
paramiko
.
DSSKey
.
from_private_key
(
key_f
)
key
=
paramiko
.
DSSKey
.
from_private_key
(
StringIO
(
text
),
password
=
password
)
except
paramiko
.
SSHException
:
pass
return
key
...
...
@@ -357,6 +357,11 @@ def _gettext():
return
gettext
.
gettext
def
get_private_key_fingerprint
(
key
):
line
=
hexlify
(
key
.
get_fingerprint
())
return
b
':'
.
join
([
line
[
i
:
i
+
2
]
for
i
in
range
(
0
,
len
(
line
),
2
)])
def
make_message
():
os
.
makedirs
(
os
.
path
.
join
(
BASE_DIR
,
"locale"
,
"zh_CN"
))
pass
...
...
logo.txt
View file @
801a1e84
___
|_ |
| |_ _ _ __ ___ _ __ ___ ___ _ ____ _____ _ __
| | | | | '_ ` _ \| '_ \/ __|/ _ \ '__\ \ / / _ \ '__|
/\__/ / |_| | | | | | | |_) \__ \ __/ | \ V / __/ |
\____/ \__,_|_| |_| |_| .__/|___/\___|_| \_/ \___|_|
| |
|_|
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