@@ -96,7 +96,7 @@ func (b *BaseApi) ContainerWsSSH(c *gin.Context) {
96
96
}
97
97
source := c .Query ("source" )
98
98
var containerID string
99
- var initCmd string
99
+ var initCmd [] string
100
100
switch source {
101
101
case "redis" :
102
102
containerID , initCmd , err = loadRedisInitCmd (c )
@@ -113,11 +113,11 @@ func (b *BaseApi) ContainerWsSSH(c *gin.Context) {
113
113
return
114
114
}
115
115
pidMap := loadMapFromDockerTop (containerID )
116
- slave , err := terminal .NewCommand ("clear && " + initCmd )
116
+ slave , err := terminal .NewCommand (initCmd )
117
117
if wshandleError (wsConn , err ) {
118
118
return
119
119
}
120
- defer killBash (containerID , strings .ReplaceAll (initCmd , fmt .Sprintf ("docker exec -it %s " , containerID ), "" ), pidMap )
120
+ defer killBash (containerID , strings .ReplaceAll (strings . Join ( initCmd , " " ), fmt .Sprintf ("exec -it %s " , containerID ), "" ), pidMap )
121
121
defer slave .Close ()
122
122
123
123
tty , err := terminal .NewLocalWsSession (cols , rows , wsConn , slave , false )
@@ -137,62 +137,63 @@ func (b *BaseApi) ContainerWsSSH(c *gin.Context) {
137
137
138
138
}
139
139
140
- func loadRedisInitCmd (c * gin.Context ) (string , string , error ) {
140
+ func loadRedisInitCmd (c * gin.Context ) (string , [] string , error ) {
141
141
name := c .Query ("name" )
142
142
from := c .Query ("from" )
143
- commands := "redis-cli"
143
+ commands := [] string { "exec" , "-it" }
144
144
database , err := databaseService .Get (name )
145
145
if err != nil {
146
- return "" , "" , fmt .Errorf ("no such database in db, err: %v" , err )
146
+ return "" , nil , fmt .Errorf ("no such database in db, err: %v" , err )
147
147
}
148
148
if from == "local" {
149
149
redisInfo , err := appInstallService .LoadConnInfo (dto.OperationWithNameAndType {Name : name , Type : "redis" })
150
150
if err != nil {
151
- return "" , "" , fmt .Errorf ("no such app in db, err: %v" , err )
151
+ return "" , nil , fmt .Errorf ("no such app in db, err: %v" , err )
152
152
}
153
153
name = redisInfo .ContainerName
154
+ commands = append (commands , []string {name , "redis-cli" }... )
154
155
if len (database .Password ) != 0 {
155
- commands = "redis-cli -a " + database .Password + " --no-auth-warning"
156
+ commands = append ( commands , [] string { "-a" , database .Password , " --no-auth-warning"} ... )
156
157
}
157
158
} else {
158
- commands = fmt .Sprintf ("redis-cli -h %s -p %v" , database .Address , database .Port )
159
+ name = "1Panel-redis-cli-tools"
160
+ commands = append (commands , []string {name , "redis-cli" , "-h" , database .Address , "-p" , fmt .Sprintf ("%v" , database .Port )}... )
159
161
if len (database .Password ) != 0 {
160
- commands = fmt . Sprintf ( "redis-cli -h %s -p %v -a %s --no-auth-warning", database . Address , database . Port , database . Password )
162
+ commands = append ( commands , [] string { "-a" , database . Password , " --no-auth-warning"} ... )
161
163
}
162
- name = "1Panel-redis-cli-tools"
163
164
}
164
- return name , fmt . Sprintf ( "docker exec -it %s %s" , name , commands ) , nil
165
+ return name , commands , nil
165
166
}
166
167
167
- func loadOllamaInitCmd (c * gin.Context ) (string , string , error ) {
168
+ func loadOllamaInitCmd (c * gin.Context ) (string , [] string , error ) {
168
169
name := c .Query ("name" )
169
170
if cmd .CheckIllegal (name ) {
170
- return "" , "" , fmt .Errorf ("ollama model %s contains illegal characters" , name )
171
+ return "" , nil , fmt .Errorf ("ollama model %s contains illegal characters" , name )
171
172
}
172
173
ollamaInfo , err := appInstallService .LoadConnInfo (dto.OperationWithNameAndType {Name : "" , Type : "ollama" })
173
174
if err != nil {
174
- return "" , "" , fmt .Errorf ("no such app in db, err: %v" , err )
175
+ return "" , nil , fmt .Errorf ("no such app in db, err: %v" , err )
175
176
}
176
177
containerName := ollamaInfo .ContainerName
177
- return containerName , fmt . Sprintf ( "docker exec -it %s ollama run %s " , containerName , name ) , nil
178
+ return containerName , [] string { " exec" , " -it" , containerName , " ollama" , " run" , name } , nil
178
179
}
179
180
180
- func loadContainerInitCmd (c * gin.Context ) (string , string , error ) {
181
+ func loadContainerInitCmd (c * gin.Context ) (string , [] string , error ) {
181
182
containerID := c .Query ("containerid" )
182
183
command := c .Query ("command" )
183
184
user := c .Query ("user" )
184
185
if cmd .CheckIllegal (user , containerID , command ) {
185
- return "" , "" , fmt .Errorf ("the command contains illegal characters. command: %s, user: %s, containerID: %s" , command , user , containerID )
186
+ return "" , nil , fmt .Errorf ("the command contains illegal characters. command: %s, user: %s, containerID: %s" , command , user , containerID )
186
187
}
187
188
if len (command ) == 0 || len (containerID ) == 0 {
188
- return "" , "" , fmt .Errorf ("error param of command: %s or containerID: %s" , command , containerID )
189
+ return "" , nil , fmt .Errorf ("error param of command: %s or containerID: %s" , command , containerID )
189
190
}
190
- command = fmt . Sprintf ( "docker exec -it %s %s " , containerID , command )
191
+ commands := [] string { " exec" , " -it" , containerID , command }
191
192
if len (user ) != 0 {
192
- command = fmt . Sprintf ( "docker exec -it -u %s %s %s " , user , containerID , command )
193
+ commands = [] string { " exec" , " -it" , "-u " , user , containerID , command }
193
194
}
194
195
195
- return containerID , command , nil
196
+ return containerID , commands , nil
196
197
}
197
198
198
199
func wshandleError (ws * websocket.Conn , err error ) bool {
0 commit comments