Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
K
koko
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
koko
Commits
774c4ac4
Commit
774c4ac4
authored
Jun 04, 2019
by
ibuler
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[Update] Telnet支持网关
parent
46e92eb9
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
45 additions
and
14 deletions
+45
-14
Gopkg.lock
Gopkg.lock
+5
-6
assets.go
pkg/service/assets.go
+1
-1
urls.go
pkg/service/urls.go
+1
-1
connmanager.go
pkg/srvconn/connmanager.go
+12
-3
sshconn.go
pkg/srvconn/sshconn.go
+0
-1
telnetconn.go
pkg/srvconn/telnetconn.go
+26
-2
No files found.
Gopkg.lock
View file @
774c4ac4
...
@@ -42,7 +42,7 @@
...
@@ -42,7 +42,7 @@
revision = "648efa622239a2f6ff949fed78ee37b48d499ba4"
revision = "648efa622239a2f6ff949fed78ee37b48d499ba4"
[[projects]]
[[projects]]
digest = "1:
9cc80abecc469330afaa9cc72744b258419f5be8adc78b7898ada5d299152048
"
digest = "1:
7b072517183e1d319b9127c2c43798e1e48f2d30b88e5a7e4f261a13c6ce5bbc
"
name = "github.com/aws/aws-sdk-go"
name = "github.com/aws/aws-sdk-go"
packages = [
packages = [
"aws",
"aws",
...
@@ -84,8 +84,8 @@
...
@@ -84,8 +84,8 @@
"service/sts",
"service/sts",
]
]
pruneopts = "UT"
pruneopts = "UT"
revision = "
d6c5ccab427af7408a67e0f45c6e6a3d515fdaee
"
revision = "
742c1495174cefd893992396b014bd6b7c91a293
"
version = "v1.19.
39
"
version = "v1.19.
42
"
[[projects]]
[[projects]]
digest = "1:2af3a6e1f12e54cef95c6051cd1cb1e154629a4b82c692ac8a92f00259f570eb"
digest = "1:2af3a6e1f12e54cef95c6051cd1cb1e154629a4b82c692ac8a92f00259f570eb"
...
@@ -286,14 +286,14 @@
...
@@ -286,14 +286,14 @@
[[projects]]
[[projects]]
branch = "master"
branch = "master"
digest = "1:
079999f5a3a0db923759948975e14ec0cee7195b9d99c566139307d971e7fc3c
"
digest = "1:
4bb3e552e0c6745f9cf718126fcfb615775178146e6435ea8ba01b105f07102e
"
name = "golang.org/x/sys"
name = "golang.org/x/sys"
packages = [
packages = [
"cpu",
"cpu",
"unix",
"unix",
]
]
pruneopts = "UT"
pruneopts = "UT"
revision = "
854af27f14a7156d646cb0812811bbc293b2d6a
7"
revision = "
4c4f7f33c9ed00de01c4c741d2177abfcfe1930
7"
[[projects]]
[[projects]]
branch = "master"
branch = "master"
...
@@ -329,7 +329,6 @@
...
@@ -329,7 +329,6 @@
"github.com/aws/aws-sdk-go/aws",
"github.com/aws/aws-sdk-go/aws",
"github.com/aws/aws-sdk-go/aws/credentials",
"github.com/aws/aws-sdk-go/aws/credentials",
"github.com/aws/aws-sdk-go/aws/session",
"github.com/aws/aws-sdk-go/aws/session",
"github.com/aws/aws-sdk-go/service/s3",
"github.com/aws/aws-sdk-go/service/s3/s3manager",
"github.com/aws/aws-sdk-go/service/s3/s3manager",
"github.com/elastic/go-elasticsearch",
"github.com/elastic/go-elasticsearch",
"github.com/gliderlabs/ssh",
"github.com/gliderlabs/ssh",
...
...
pkg/service/assets.go
View file @
774c4ac4
...
@@ -88,7 +88,7 @@ func GetDomainWithGateway(gID string) (domain model.Domain) {
...
@@ -88,7 +88,7 @@ func GetDomainWithGateway(gID string) (domain model.Domain) {
url
:=
fmt
.
Sprintf
(
DomainDetailURL
,
gID
)
url
:=
fmt
.
Sprintf
(
DomainDetailURL
,
gID
)
err
:=
authClient
.
Get
(
url
,
&
domain
)
err
:=
authClient
.
Get
(
url
,
&
domain
)
if
err
!=
nil
{
if
err
!=
nil
{
logger
.
Errorf
(
"Get domain %s failed
"
,
gID
)
logger
.
Errorf
(
"Get domain %s failed
: %s"
,
gID
,
err
)
}
}
return
return
}
}
...
...
pkg/service/urls.go
View file @
774c4ac4
...
@@ -12,7 +12,7 @@ const (
...
@@ -12,7 +12,7 @@ const (
SystemUserCmdFilterRules
=
"/api/assets/v1/system-user/%s/cmd-filter-rules/"
// 过滤规则url
SystemUserCmdFilterRules
=
"/api/assets/v1/system-user/%s/cmd-filter-rules/"
// 过滤规则url
SystemUserDetailURL
=
"/api/assets/v1/system-user/%s/"
// 某个系统用户的信息
SystemUserDetailURL
=
"/api/assets/v1/system-user/%s/"
// 某个系统用户的信息
AssetDetailURL
=
"/api/assets/v1/assets/%s/"
// 某一个资产信息
AssetDetailURL
=
"/api/assets/v1/assets/%s/"
// 某一个资产信息
DomainDetailURL
=
"/api/assets/v1/domain/%s/"
DomainDetailURL
=
"/api/assets/v1/domain/%s/
?gateway=1
"
TerminalRegisterURL
=
"/api/terminal/v2/terminal-registrations/"
// 注册当前coco
TerminalRegisterURL
=
"/api/terminal/v2/terminal-registrations/"
// 注册当前coco
TerminalConfigURL
=
"/api/terminal/v1/terminal/config/"
// 从jumpserver获取coco的配置
TerminalConfigURL
=
"/api/terminal/v1/terminal/config/"
// 从jumpserver获取coco的配置
...
...
pkg/srvconn/connmanager.go
View file @
774c4ac4
...
@@ -66,9 +66,13 @@ func (sc *SSHClientConfig) Config() (config *gossh.ClientConfig, err error) {
...
@@ -66,9 +66,13 @@ func (sc *SSHClientConfig) Config() (config *gossh.ClientConfig, err error) {
func
(
sc
*
SSHClientConfig
)
DialProxy
()
(
client
*
gossh
.
Client
,
err
error
)
{
func
(
sc
*
SSHClientConfig
)
DialProxy
()
(
client
*
gossh
.
Client
,
err
error
)
{
for
_
,
p
:=
range
sc
.
Proxy
{
for
_
,
p
:=
range
sc
.
Proxy
{
logger
.
Debug
(
"Connect proxy: ......."
)
client
,
err
=
p
.
Dial
()
client
,
err
=
p
.
Dial
()
if
err
==
nil
{
if
err
==
nil
{
logger
.
Debug
(
"Connect proxy host %s:%s success"
,
p
.
Host
,
p
.
Port
)
return
return
}
else
{
logger
.
Errorf
(
"Connect proxy host %s:%s error: "
,
p
.
Host
,
p
.
Port
,
err
)
}
}
}
}
return
return
...
@@ -113,12 +117,12 @@ func (sc *SSHClientConfig) String() string {
...
@@ -113,12 +117,12 @@ func (sc *SSHClientConfig) String() string {
return
fmt
.
Sprintf
(
"%s@%s:%s"
,
sc
.
User
,
sc
.
Host
,
sc
.
Port
)
return
fmt
.
Sprintf
(
"%s@%s:%s"
,
sc
.
User
,
sc
.
Host
,
sc
.
Port
)
}
}
func
newClient
(
asset
*
model
.
Asset
,
systemUser
*
model
.
SystemUser
,
timeout
time
.
Duration
)
(
client
*
gossh
.
Client
,
err
error
)
{
func
MakeConfig
(
asset
*
model
.
Asset
,
systemUser
*
model
.
SystemUser
,
timeout
time
.
Duration
)
(
conf
*
SSHClientConfig
)
{
proxyConfigs
:=
make
([]
*
SSHClientConfig
,
0
)
proxyConfigs
:=
make
([]
*
SSHClientConfig
,
0
)
// 如果有网关则从网关中连接
// 如果有网关则从网关中连接
if
asset
.
Domain
!=
""
{
if
asset
.
Domain
!=
""
{
domain
:=
service
.
GetDomainWithGateway
(
asset
.
Domain
)
domain
:=
service
.
GetDomainWithGateway
(
asset
.
Domain
)
if
domain
.
ID
!=
""
&&
len
(
domain
.
Gateways
)
>
1
{
if
domain
.
ID
!=
""
&&
len
(
domain
.
Gateways
)
>
0
{
for
_
,
gateway
:=
range
domain
.
Gateways
{
for
_
,
gateway
:=
range
domain
.
Gateways
{
proxyConfigs
=
append
(
proxyConfigs
,
&
SSHClientConfig
{
proxyConfigs
=
append
(
proxyConfigs
,
&
SSHClientConfig
{
Host
:
gateway
.
IP
,
Host
:
gateway
.
IP
,
...
@@ -131,7 +135,7 @@ func newClient(asset *model.Asset, systemUser *model.SystemUser, timeout time.Du
...
@@ -131,7 +135,7 @@ func newClient(asset *model.Asset, systemUser *model.SystemUser, timeout time.Du
}
}
}
}
}
}
sshConfig
:=
SSHClientConfig
{
conf
=
&
SSHClientConfig
{
Host
:
asset
.
IP
,
Host
:
asset
.
IP
,
Port
:
strconv
.
Itoa
(
asset
.
Port
),
Port
:
strconv
.
Itoa
(
asset
.
Port
),
User
:
systemUser
.
Username
,
User
:
systemUser
.
Username
,
...
@@ -140,6 +144,11 @@ func newClient(asset *model.Asset, systemUser *model.SystemUser, timeout time.Du
...
@@ -140,6 +144,11 @@ func newClient(asset *model.Asset, systemUser *model.SystemUser, timeout time.Du
Timeout
:
timeout
,
Timeout
:
timeout
,
Proxy
:
proxyConfigs
,
Proxy
:
proxyConfigs
,
}
}
return
}
func
newClient
(
asset
*
model
.
Asset
,
systemUser
*
model
.
SystemUser
,
timeout
time
.
Duration
)
(
client
*
gossh
.
Client
,
err
error
)
{
sshConfig
:=
MakeConfig
(
asset
,
systemUser
,
timeout
)
client
,
err
=
sshConfig
.
Dial
()
client
,
err
=
sshConfig
.
Dial
()
return
return
}
}
...
...
pkg/srvconn/sshconn.go
View file @
774c4ac4
...
@@ -21,7 +21,6 @@ type ServerSSHConnection struct {
...
@@ -21,7 +21,6 @@ type ServerSSHConnection struct {
stdin
io
.
WriteCloser
stdin
io
.
WriteCloser
stdout
io
.
Reader
stdout
io
.
Reader
closed
bool
closed
bool
refCount
int
connected
bool
connected
bool
}
}
...
...
pkg/srvconn/telnetconn.go
View file @
774c4ac4
...
@@ -2,14 +2,16 @@ package srvconn
...
@@ -2,14 +2,16 @@ package srvconn
import
(
import
(
"bytes"
"bytes"
"cocogo/pkg/model"
"errors"
"errors"
"net"
"net"
"regexp"
"regexp"
"strconv"
"strconv"
"time"
"time"
gossh
"golang.org/x/crypto/ssh"
"cocogo/pkg/logger"
"cocogo/pkg/logger"
"cocogo/pkg/model"
)
)
const
(
const
(
...
@@ -139,7 +141,29 @@ func (tc *ServerTelnetConnection) login(data []byte) AuthStatus {
...
@@ -139,7 +141,29 @@ func (tc *ServerTelnetConnection) login(data []byte) AuthStatus {
func
(
tc
*
ServerTelnetConnection
)
Connect
(
h
,
w
int
,
term
string
)
(
err
error
)
{
func
(
tc
*
ServerTelnetConnection
)
Connect
(
h
,
w
int
,
term
string
)
(
err
error
)
{
var
ip
=
tc
.
Asset
.
IP
var
ip
=
tc
.
Asset
.
IP
var
port
=
strconv
.
Itoa
(
tc
.
Asset
.
Port
)
var
port
=
strconv
.
Itoa
(
tc
.
Asset
.
Port
)
conn
,
err
:=
net
.
DialTimeout
(
"tcp"
,
net
.
JoinHostPort
(
ip
,
port
),
tc
.
Timeout
())
var
asset
=
tc
.
Asset
var
proxyConn
*
gossh
.
Client
if
asset
.
Domain
!=
""
{
sshConfig
:=
MakeConfig
(
tc
.
Asset
,
tc
.
SystemUser
,
tc
.
Timeout
())
proxyConn
,
err
=
sshConfig
.
DialProxy
()
logger
.
Errorf
(
"Proxy conn: "
,
proxyConn
)
if
err
!=
nil
{
logger
.
Error
(
"Dial proxy host error"
)
return
}
}
addr
:=
net
.
JoinHostPort
(
ip
,
port
)
var
conn
net
.
Conn
// 判断是否有合适的proxy连接
if
proxyConn
!=
nil
{
logger
.
Debug
(
"Connect host via proxy"
)
conn
,
err
=
proxyConn
.
Dial
(
"tcp"
,
addr
)
}
else
{
logger
.
Debug
(
"Direct connect host"
)
conn
,
err
=
net
.
DialTimeout
(
"tcp"
,
addr
,
tc
.
Timeout
())
}
if
err
!=
nil
{
if
err
!=
nil
{
return
return
}
}
...
...
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