Getting powershell.exe and cmd.exe works on ssh session
- Dominant language
- Go
- Stars
- 4.2k
- Forks
- 509
- PR merge metrics
- No merged PRs in 30d
Description
The following code does not work either with powershell.exe and cmd.exe.
I can't type anything when the session starts ..
```go
func GiveShell(s ssh.Session) {
_, _, isPty := s.Pty()
if isPty {
logger.Get().Info("PTY requested")
cmd := exec.Command("cmd")
stdin, err := cmd.StdinPipe()
if err != nil {
logger.Get().Warn("Error occured: %s")
return
}
stdout, err := cmd.StdoutPipe()
if err != nil {
logger.Get().Warn("Error occured: %s", err)
return
}
stderr, err := cmd.StderrPipe()
if err != nil {
logger.Get().Warn("Error occured: %s", err)
return
}
go func() {
io.Copy(stdin, s)
}()
go func() {
io.Copy(s, stdout)
}()
go func() {
io.Copy(s, stderr)
}()
err = cmd.Run()
if err == nil {
logger.Get().Info("Session ended normally")
s.Exit(0)
} else {
logger.Get().Info("Session ended with an error: %v\n", err)
exitCode := 1
if exitError, ok := err.(*exec.ExitError); ok {
exitCode = exitError.ExitCode()
logger.Get().Info("exit code: %d\n", exitCode)
}
s.Exit(exitCode)
}
} else {
msg := "No PTY requested."
io.WriteString(s, msg)
logger.Get().Warn(msg)
}
}
```
Contributor guide
No contributing guide indexed for this repository
Assessment
This issue has not been assessed yet.