diff --git a/pkg/webconsole/command/command.go b/pkg/webconsole/command/command.go index 2a70350b07..c323f3d8e7 100644 --- a/pkg/webconsole/command/command.go +++ b/pkg/webconsole/command/command.go @@ -31,6 +31,7 @@ const ( type ICommand interface { GetProtocol() string GetCommand() *exec.Cmd + GetSafeCommandString() string Cleanup() error Scan(d byte, send func(msg string)) GetClientSession() *mcclient.ClientSession @@ -66,6 +67,10 @@ func (c BaseCommand) GetCommand() *exec.Cmd { return exec.Command(c.name, c.args...) } +func (c BaseCommand) GetSafeCommandString() string { + return c.GetCommand().String() +} + func (c BaseCommand) Scan(byte, func(msg string)) { } diff --git a/pkg/webconsole/command/ipmi_command.go b/pkg/webconsole/command/ipmi_command.go index 80f9173cfc..92aa7854eb 100644 --- a/pkg/webconsole/command/ipmi_command.go +++ b/pkg/webconsole/command/ipmi_command.go @@ -17,6 +17,7 @@ package command import ( "fmt" "os/exec" + "strings" "yunion.io/x/log" @@ -73,6 +74,20 @@ func (c *IpmitoolSol) GetCommand() *exec.Cmd { return c.BaseCommand.GetCommand() } +func (c *IpmitoolSol) GetSafeCommandString() string { + cmd := []string{c.BaseCommand.name} + i := 0 + for i < len(c.BaseCommand.args) { + cmd = append(cmd, c.BaseCommand.args[i]) + if c.BaseCommand.args[i] == "-P" { + cmd = append(cmd, "******") + i += 1 + } + i += 1 + } + return strings.Join(cmd, " ") +} + func (c IpmitoolSol) GetProtocol() string { return PROTOCOL_TTY } diff --git a/pkg/webconsole/session/remote_console.go b/pkg/webconsole/session/remote_console.go index ccf0947f74..abc311dae9 100644 --- a/pkg/webconsole/session/remote_console.go +++ b/pkg/webconsole/session/remote_console.go @@ -98,6 +98,10 @@ func (info *RemoteConsoleInfo) GetCommand() *exec.Cmd { return nil } +func (info *RemoteConsoleInfo) GetSafeCommandString() string { + return "" +} + // Cleanup implements ISessionData interface func (info *RemoteConsoleInfo) Cleanup() error { return nil diff --git a/pkg/webconsole/session/remote_console_rdp.go b/pkg/webconsole/session/remote_console_rdp.go index d832641cae..40fc39d918 100644 --- a/pkg/webconsole/session/remote_console_rdp.go +++ b/pkg/webconsole/session/remote_console_rdp.go @@ -83,6 +83,10 @@ func (info *RemoteRDPConsoleInfo) GetCommand() *exec.Cmd { return nil } +func (info *RemoteRDPConsoleInfo) GetSafeCommandString() string { + return "" +} + func (info *RemoteRDPConsoleInfo) Cleanup() error { return nil } diff --git a/pkg/webconsole/session/session.go b/pkg/webconsole/session/session.go index 1b00419187..7467ebc7ba 100644 --- a/pkg/webconsole/session/session.go +++ b/pkg/webconsole/session/session.go @@ -135,7 +135,7 @@ func (s *RandomSessionData) GetDisplayInfo(ctx context.Context) (*SDisplayInfo, } dispInfo := SDisplayInfo{} dispInfo.WaterMark = fetchWaterMark(userInfo) - dispInfo.InstanceName = s.GetCommand().String() + dispInfo.InstanceName = s.GetSafeCommandString() return &dispInfo, nil } diff --git a/pkg/webconsole/session/ssh_session.go b/pkg/webconsole/session/ssh_session.go index 87cc81d4bd..7670398263 100644 --- a/pkg/webconsole/session/ssh_session.go +++ b/pkg/webconsole/session/ssh_session.go @@ -101,6 +101,10 @@ func (s *SSshSession) GetCommand() *exec.Cmd { return nil } +func (s *SSshSession) GetSafeCommandString() string { + return "" +} + func (s *SSshSession) IsNeedLogin() (bool, error) { if len(s.Username) > 0 && len(s.Password) > 0 { config := &ssh.ClientConfig{