Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
golang中的ssh服务器_Go_Ssh - Fatal编程技术网

golang中的ssh服务器

golang中的ssh服务器,go,ssh,Go,Ssh,为了构建ssh服务器,我正在尝试github.com/gliderlabs/ssh包。 这个例子效果很好。 下面的代码在我连接时收听并回复一些文本,然后关闭连接 我想保持它的开放性,倾听用户的输入,并回应您的说法:。。。但我不知道该怎么办,这似乎太简单了,无法在什么地方解释 有人能告诉我该怎么办吗 package main import ( "bufio" "fmt" "io" "log" "github.com/gliderlabs/ssh" )

为了构建ssh服务器,我正在尝试github.com/gliderlabs/ssh包。 这个例子效果很好。 下面的代码在我连接时收听并回复一些文本,然后关闭连接

我想保持它的开放性,倾听用户的输入,并回应您的说法:。。。但我不知道该怎么办,这似乎太简单了,无法在什么地方解释

有人能告诉我该怎么办吗

package main

import (
    "bufio"
    "fmt"
    "io"
    "log"

    "github.com/gliderlabs/ssh"
)

func main() {
    ssh.Handle(func(s ssh.Session) {

        io.WriteString(s, fmt.Sprintf("Hello %s\n", s.User()))
        io.WriteString(s, fmt.Sprintf("Hello 2%s\n", s.User()))
        io.WriteString(s, fmt.Sprintf("Hello 3%s\n", s.User()))     

        text,err:= bufio.NewReader(s).ReadString('\n')
        if err != nil  {
            panic("GetLines: " + err.Error())
        }

        io.WriteString(s, fmt.Sprintf("ton texte %s\n", text))   
    })

    log.Println("starting ssh server on port 2223...")
    log.Fatal(ssh.ListenAndServe(":2223", nil))
}

若问题仍然是实际的,那个么您应该在处理程序中使用{}循环,并始终读取输入。顺便说一句,它更适合使用golang.org/x/crypto/ssh/terminal包

这里有一个小例子:

func (s *Server) handler(sess ssh.Session) {
...
    term := terminal.NewTerminal(sess, "> ")
        for {
            line, err := term.ReadLine()
            if err != nil {
                break
            }
            response := router(line)
            log.Println(line)
            if response != "" {
                term.Write(append([]byte(response), '\n'))
            }
        }
        log.Println("terminal closed")
}

我认为这不是ssh的目的。它确保了连接的安全,而不是假设自己做什么。例如,您可以通过ssh连接到远程bash,然后安全地使用远程bash。右ssh是传输流的一种方式。但接下来我的问题是,如何充分倾听帽子隧道的尽头。我有一些代码,但我不能粘贴它