带斜杠的GoLang SSH命令似乎立即失败

时间:2018-08-22 17:09:50

标签: go ssh

我当前正在编写一个具有参数的应用程序,它将在远程服务器上运行命令。我正在使用/ x / crypto / ssh软件包,如果我使用诸如“ who”或“ ls”之类的衬里命令,那么一切似乎都进行得很顺利,但是,如果我运行更复杂的命令,例如:

“ grep SOMEDATA /var/log/logfile.log”

程序立即退出,命令执行行只剩下“进程退出,状态为1”,我什么也没回来。

如果我查看用户的历史记录,就知道它是通过SSH远程系统登录的,则根本看不到命令​​在运行。

之前有没有其他人遇到过此类问题?这是我用来执行此操作的代码片段(当然,敏感数据已删除):

func returnData(w http.ResponseWriter, r *http.Request) {
var b bytes.Buffer
hostKey, err := getHostKey("SERVERNAME")
if err != nil {
    log.Fatalln(err)
}

err = r.ParseForm()
if err != nil {
    log.Fatalln(err)
}

config := &ssh.ClientConfig{
    User: "USERNAME",
    Auth: []ssh.AuthMethod{
        ssh.Password("TESTPASS"),
    },
    HostKeyCallback: ssh.FixedHostKey(hostKey),
}

client, err := ssh.Dial("tcp", "SERVERNAME:22", config)
if err != nil {
    log.Fatalln("Creating Client Failed: ", err)
}

session, err := client.NewSession()
if err != nil {
    log.Fatalln("Creating new Session Failed: ", err)
}

session.Stdout = &b
inputData := r.Form["fname"][0]
cmdExecute := fmt.Sprintf(`sudo grep %v /var/log/logfile.log`, inputData)
log.Println(cmdExecute)
if err := session.Run(cmdExecute); err != nil {
    log.Fatalln("Getting Data From session Failed: ", err)
    log.Fatalln(b.String())
}
//log.Println(hostKey)
defer session.Close()

0 个答案:

没有答案