Wie implementieren Sie die SSH -Sitzungs -Protokollierung in Go?Linux

Linux verstehen
Guest
 Wie implementieren Sie die SSH -Sitzungs -Protokollierung in Go?

Post by Guest »

Ich schreibe einen einfachen Bastion -Dienst, der Eingabe/Ausgabe einer SSH -Sitzung protokolliert. Der SSH-Verbindungsteil sieht aus wie: < /p>
func connect(user, host string, logger sessionLogger) error {
cmd := exec.Command("ssh", user+"@"+host)
t, err := pty.Start(cmd)
if err != nil {
return err
}
defer t.Close()
go func() {
buf := make([]byte, 1024)
for {
n, err := t.Read(buf)
if err != nil {
break
}
os.Stdout.Write(buf[:n])
logger(buf[:n])
}
}()
go func() { io.Copy(t, os.Stdin) }()
return cmd.Wait()
}
< /code>
Das Problem ist, dass alle vom Benutzer eingegebenen Befehle zweimal zum PTY wie folgt wiedergegeben werden: < /p>

Ich habe versucht, mit dem Stdin/Stdout eines CMD zu spielen, einschließlich der Verwendung von Pty überhaupt nicht , aber verschiedene seltsame Probleme, z. Keine Ausgabe der Eingabeaufforderung usw. Die meisten von ihnen beziehen sich auf die Art der Stdout eines Befehls (es muss ein Pty sein). < /p>
Dies ist das beste Ergebnis, das ich jetzt habe. Aber ich muss das übermäßige Echo des Befehls beseitigen.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post