Я был в состоянии передать телнет через WebSocket, используя golang, используя что-то вродеGolang: вперед SSH через WebSocket
func forwardtcp(wsconn *websocket.Conn, conn *telnet.Conn) {
connbuf := bufio.NewReader(conn)
tcpbuffer := make([]byte, 128)
for {
n, err := connbuf.Read(tcpbuffer)
if err != nil {
log.Println("TCP Read failed")
break
}
if err == nil {
wsconn.WriteMessage(websocket.BinaryMessage, tcpbuffer[:n])
}
}
}
Однако я не могу сделать то же с SSH или сеанс оболочки. Я не понимаю фундаментальную концепцию с использованием
targetStdout, _ := session.StdoutPipe()
targetStdin, _ := session.StdinPipe()
штук.
Я могу использовать io.Copy, но не уверен, как отформатировать их в дейтаграмме, которая может быть отправлена с подключением к сети.
Можно ли обрабатывать каналы targetStdin и targetStdout таким образом, чтобы их можно было читать и записывать с помощью байтов, например, полученных из соединения веб-сокета? Или есть лучший способ получить io из SSH-соединения?
Да - для браузера. –