nsenter
ctrl+R
nsenterstdin: is not a ttystdintty

Thanks

package main

import (
  "code.google.com/p/go.crypto/ssh"
  "io/ioutil"
  "log"
  "os"
)

func privateKey() ssh.Signer {
  buf, err := ioutil.ReadFile("./id_rsa")
  if err != nil {
    panic(err)
  }
  key, err := ssh.ParsePrivateKey(buf)
  if err != nil {
    panic(err)
  }

  return key
}

func main() {
  privateKey := privateKey()

  // Create client config
  config := &ssh.ClientConfig{
    User: "core",
    Auth: []ssh.AuthMethod{
      ssh.PublicKeys(privateKey),
    },
  }

  // Connect to ssh server
  conn, err := ssh.Dial("tcp", "myhost.com:22", config)
  if err != nil {
    log.Fatalf("unable to connect: %s", err)
  }
  defer conn.Close()

  // Create a session
  session, err := conn.NewSession()
  if err != nil {
    log.Fatalf("unable to create session: %s", err)
  }

  session.Stdout = os.Stdout
  session.Stderr = os.Stderr
  session.Stdin = os.Stdin // How can session.Stdin be a tty?

  //////////////////////////////////////////////////////////////////////
  // Stuff for interactive shell
  // Set up terminal modes
  //modes := ssh.TerminalModes{
  //  ssh.ECHO:          1,     // enable echoing
  //  ssh.TTY_OP_ISPEED: 14400, // input speed = 14.4kbaud
  //  ssh.TTY_OP_OSPEED: 14400, // output speed = 14.4kbaud
  //}
  // Request pseudo terminal
  //if err := session.RequestPty("xterm-256color", 80, 40, modes); err != nil {
  //  log.Fatalf("request for pseudo terminal failed: %s", err)
  //}
  // Start remote shell
  //if err := session.Shell(); err != nil {
  //  log.Fatalf("failed to start shell: %s", err)
  //}
  //////////////////////////////////////////////////////////////////////

  //////////////////////////////////////////////////////////////////////
  // Stuff for executing remote command
  // 2202 in my example is actually the pid of a running container
  if err := session.Run("sudo nsenter --target 2202 --mount --uts --ipc --net --pid"); err != nil {
    panic("Failed to run: " + err.Error())
  }
  //////////////////////////////////////////////////////////////////////

  session.Wait()
}