使用“Go”生成具有TTY from的shell;nc-e/bin/bash“;

使用“Go”生成具有TTY from的shell;nc-e/bin/bash“;,bash,shell,go,Bash,Shell,Go,我想逃离一个通过围棋生成bash shell的受限shell。换句话说,我想这样做,但使用Go: python -c 'import pty; pty.spawn("/bin/bash")' 我是新来的。我尝试过这个(按照这个问题的答案),但什么都没有发生: package main import "os" import "os/exec" func main() { shell := exec.Command("/bin/bash") shell.Stdout = os.

我想逃离一个通过围棋生成bash shell的受限shell。换句话说,我想这样做,但使用Go:

python -c 'import pty; pty.spawn("/bin/bash")'
我是新来的。我尝试过这个(按照这个问题的答案),但什么都没有发生:

package main

import "os"
import "os/exec"

func main() {
    shell := exec.Command("/bin/bash")
    shell.Stdout = os.Stdout
    shell.Stdin = os.Stdin
    shell.Stderr = os.Stderr
    shell.Run()
}
另外,如果我在主函数末尾添加
fmt.Println(“hello”)
行,则不会打印任何内容

更新

也许我解释得不好。我试图实现的是生成一个限制壳。这就是我所做的: 听众:

nc.traditional -l -p 8080 -e /bin/bash
连接到侦听器:我在这里执行代码

nc.traditional localhost 8080 -v

你的程序对我来说很好。我加入了一些错误检查和一个额外的打印语句,这将使正在发生的事情更加清楚。您得到的是一个交互式shell,它看起来与上一个shell完全相同

$ go run Go/shell.go 
$ # whoa another shell
$ exit
exit
exiting
$ # back again
$ 
这是修改后的计划

package main

import (
    "fmt"
    "log"
    "os"
    "os/exec"
)

func main() {
    shell := exec.Command("/bin/bash")
    shell.Stdout = os.Stdout
    shell.Stdin = os.Stdin
    shell.Stderr = os.Stderr
    err := shell.Run()
    if err != nil {
        log.Fatalf("command failed: %v", err)
    }
    fmt.Printf("exiting\n")
}

谢谢你的回答。我已经更新了问题。事实上,如果我从一个tty外壳上做这一切,它是有效的,但事实并非如此。如果我解释得不好,我道歉