我有一个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
的情况下继续向其推送消息