add: sshsvc support telnet server

This commit is contained in:
2024-09-09 14:11:18 +08:00
parent 4a609d12bb
commit b5ae51d1cc
5 changed files with 30 additions and 17 deletions

View File

@@ -129,6 +129,10 @@ func XCoreDB() *core.DB {
return xEngine.DB() return xEngine.DB()
} }
func XEngDB() *xorm.Engine {
return xEngine
}
func ConstructInsertSQL(tableName string, insertData interface{}) (string, []string) { func ConstructInsertSQL(tableName string, insertData interface{}) (string, []string) {
log.Debug("ConstructInsertSQL processing... ") log.Debug("ConstructInsertSQL processing... ")
log.Debug("Request insertData:", insertData) log.Debug("Request insertData:", insertData)

View File

@@ -46,6 +46,7 @@ type MmlVar struct {
Authorization string `josn:"authorization"` Authorization string `josn:"authorization"`
HttpUri string `json:"httpUri"` HttpUri string `json:"httpUri"`
UserAgent string `json:"userAgent"` UserAgent string `json:"userAgent"`
TagNE string `json:"tagNE"`
} }
// func init() { // func init() {

View File

@@ -51,7 +51,7 @@ type YamlConfig struct {
UserName string `yaml:"userName"` UserName string `yaml:"userName"`
Password string `yaml:"password"` Password string `yaml:"password"`
AuthType string `yaml:"authType"` AuthType string `yaml:"authType"`
OMCUrl string `yaml:"omcUrl"` TagNE string `yaml:"tagNE"`
} `yaml:"sshd"` } `yaml:"sshd"`
TelnetServer struct { TelnetServer struct {
@@ -64,7 +64,7 @@ type YamlConfig struct {
UserName string `yaml:"userName"` UserName string `yaml:"userName"`
Password string `yaml:"password"` Password string `yaml:"password"`
AuthType string `yaml:"authType"` AuthType string `yaml:"authType"`
OMCUrl string `yaml:"omcUrl"` TagNE string `yaml:"tagNE"`
} `yaml:"telnetServer"` } `yaml:"telnetServer"`
Database DbConfig `yaml:"database"` Database DbConfig `yaml:"database"`

View File

@@ -21,7 +21,7 @@ logmml:
# ssh service listen ipv4/v6 and port, support multiple routines # ssh service listen ipv4/v6 and port, support multiple routines
# ip: 0.0.0.0 or ::0, support IPv4/v6 # ip: 0.0.0.0 or ::0, support IPv4/v6
# session: single/multiple session for one user # session: single/multiple session for one user
# authType: local/omc # authType: local/radius
sshd: sshd:
listenAddr: 0.0.0.0 listenAddr: 0.0.0.0
listenPort: 32222 listenPort: 32222
@@ -32,8 +32,8 @@ sshd:
mmlHome: ./mmlhome mmlHome: ./mmlhome
userName: manager userName: manager
password: pass123 password: pass123
authType: local authType: radius
omcUrl: tagNE: hlr
# authType: local/omc # authType: local/omc
telnetServer: telnetServer:
@@ -45,16 +45,16 @@ telnetServer:
mmlHome: ./mmlhome mmlHome: ./mmlhome
userName: manager userName: manager
password: pass123 password: pass123
authType: local authType: radius
omcUrl: tagNE: hlr
database: database:
type: mysql type: mysql
user: root user: administrator
password: 1000omc@kp! password: "*86#ROtartsinim"
host: 127.0.0.1 host: 192.168.13.117
port: 33066 port: 3306
name: omc_db name: OMC_PUB
connParam: charset=utf8mb4&collation=utf8mb4_general_ci&parseTime=True&interpolateParams=True connParam: charset=utf8mb4&collation=utf8mb4_general_ci&parseTime=True&interpolateParams=True
omc: omc:

View File

@@ -144,7 +144,14 @@ func handleAuth(authType, userName, password string) bool {
return true return true
} }
return false return false
case "radius":
exist, err := dborm.XEngDB().Table("OMC_PUB.sysUser").Where("userName=? AND password=md5(?)", userName, password).Exist()
if err != nil {
return false
}
return exist
case "omc": case "omc":
default: default:
} }
@@ -236,7 +243,7 @@ func handleTelnetConnection(conn net.Conn) {
if handleAuth(conf.TelnetServer.AuthType, user, pass) { if handleAuth(conf.TelnetServer.AuthType, user, pass) {
writer.WriteString("\nAuthentication successful!\n") writer.WriteString("\nAuthentication successful!\n")
writer.Flush() writer.Flush()
handleCommands(user, reader, writer) handleCommands(user, conf.TelnetServer.TagNE, reader, writer)
} else { } else {
writer.WriteString("\nAuthentication failed!\n") writer.WriteString("\nAuthentication failed!\n")
writer.Flush() writer.Flush()
@@ -244,8 +251,8 @@ func handleTelnetConnection(conn net.Conn) {
} }
// 处理命令输入 // 处理命令输入
func handleCommands(user string, reader *bufio.Reader, writer *bufio.Writer) { func handleCommands(user, tag string, reader *bufio.Reader, writer *bufio.Writer) {
header := fmt.Sprintf("[%s@omc]> ", user) header := fmt.Sprintf("[%s@%s]> ", user, tag)
for { for {
command, err := reader.ReadString('\n') command, err := reader.ReadString('\n')
if err != nil { if err != nil {
@@ -368,7 +375,7 @@ func handleSSHShell(sshConn *ssh.ServerConn, channel ssh.Channel) {
// 检查通道是否支持终端 // 检查通道是否支持终端
omcMmlVar := &mmlp.MmlVar{ omcMmlVar := &mmlp.MmlVar{
Version: "16.1.1", Version: global.Version,
Output: mmlp.DefaultFormatType, Output: mmlp.DefaultFormatType,
MmlHome: conf.Sshd.MmlHome, MmlHome: conf.Sshd.MmlHome,
Limit: 50, Limit: 50,
@@ -376,9 +383,10 @@ func handleSSHShell(sshConn *ssh.ServerConn, channel ssh.Channel) {
SessionToken: fmt.Sprintf("%x", sshConn.SessionID()), SessionToken: fmt.Sprintf("%x", sshConn.SessionID()),
HttpUri: conf.OMC.HttpUri, HttpUri: conf.OMC.HttpUri,
UserAgent: config.GetDefaultUserAgent(), UserAgent: config.GetDefaultUserAgent(),
TagNE: conf.Sshd.TagNE,
} }
term := term.NewTerminal(channel, fmt.Sprintf("[%s@omc]> ", omcMmlVar.User)) term := term.NewTerminal(channel, fmt.Sprintf("[%s@%s]> ", omcMmlVar.User, omcMmlVar.TagNE))
// 启动交互式shell会话 // 启动交互式shell会话
for { for {
line, err := term.ReadLine() line, err := term.ReadLine()