У меня есть приложение Go, которое запускает SSH-сервер, который не принимает никаких команд для запуска на нем, поэтому такие вещи, как err = session.Run("ls -l $LC_USR_DIR")
, будут отклонены.
На сервере также нет Pty.
Когда я отправляю SSH в это приложение Go из своего терминала, я могу отправлять сообщения в формате JSON, которые приложение принимает и обрабатывает следующим образом:
user@host:~/go/src/app$ ssh localhost -p 2095
PTY allocation request failed on channel 0
qwerty
{"response":"malformed_or_unknown_request"}
Как я могу сделать то же самое, но через другое приложение Go, котороебудет действовать как балансировщик нагрузки или прокси и разделять запросы между несколькими экземплярами вышеописанного приложения?И без команд.
Пока у меня есть:
func HandleMessage(msg string) {
connection, err := ssh.Dial("tcp", "localhost:2095", getConfig("/home/user/.ssh/id_rsa"))
if err != nil {
log.Println("Could not establish connection with server:", err)
return
}
defer connection.Close()
session, err := connection.NewSession()
if err != nil {
log.Println("Could not create session with server:", err)
return
}
defer session.Close()
err = session.Shell()
fmt.Println(msg)
fmt.Println(err)
}
Соединение установлено успешно, потому что мое приложение Go видит и принимает запрос оболочки, но у меня естьне знаю, как продолжить отправку сообщения без использования команд и таких вещей, как session.Output
или session.Run