diff --git a/Gopkg.lock b/Gopkg.lock index a6ccec0..eb11fb2 100644 --- a/Gopkg.lock +++ b/Gopkg.lock @@ -120,7 +120,7 @@ [[projects]] branch = "master" - digest = "1:8e56f01a7d273a0c67edb531e176e93b9f27cbe567bc84213b9b5c03bcb57b78" + digest = "1:6019f7d49498f02cd589d41db388e11470de1f218a0a534c52353788684d8cd9" name = "golang.org/x/crypto" packages = [ "curve25519", @@ -131,15 +131,19 @@ "poly1305", "ssh", "ssh/agent", + "ssh/terminal", ] pruneopts = "UT" revision = "614d502a4dac94afa3a6ce146bd1736da82514c6" [[projects]] branch = "master" - digest = "1:a3f00ac457c955fe86a41e1495e8f4c54cb5399d609374c5cc26aa7d72e542c8" + digest = "1:48774faa158e9eaee1ba45aad66434bb0345927b43756a24d4fe4c44ad79e307" name = "golang.org/x/sys" - packages = ["unix"] + packages = [ + "unix", + "windows", + ] pruneopts = "UT" revision = "3b58ed4ad3395d483fc92d5d14123ce2c3581fec" @@ -157,6 +161,7 @@ "github.com/juju/loggo", "golang.org/x/crypto/ssh", "golang.org/x/crypto/ssh/agent", + "golang.org/x/crypto/ssh/terminal", ] solver-name = "gps-cdcl" solver-version = 1 diff --git a/main.go b/main.go index a836544..13c759d 100644 --- a/main.go +++ b/main.go @@ -289,7 +289,7 @@ func main() { log.Panicln(err) } if e.ipAddr != nil { - err = startSSH() + err = startSSH(*e.ipAddr, *e.keyName) if err != nil { fmt.Printf("Error: %v\n\n", err) } diff --git a/ssh.go b/ssh.go index 9537c8a..0357288 100644 --- a/ssh.go +++ b/ssh.go @@ -2,9 +2,9 @@ package main import ( "encoding/binary" - "github.com/docker/docker/pkg/term" "golang.org/x/crypto/ssh" "golang.org/x/crypto/ssh/agent" + "golang.org/x/crypto/ssh/terminal" "fmt" "io/ioutil" @@ -14,21 +14,21 @@ import ( "syscall" ) -func startSSH() error { +func startSSH(ipAddr, keyName string) error { width := 80 height := 24 sshConfig := &ssh.ClientConfig{ User: "ec2-user", Auth: []ssh.AuthMethod{ SSHAgent(), - PublicKeyFile("/keys/" + *e.keyName), + PublicKeyFile("/keys/" + keyName), }, HostKeyCallback: func(hostname string, remote net.Addr, key ssh.PublicKey) error { return nil }, } - fmt.Printf("Opening connection to %v:22 with key %v", *e.ipAddr, "/keys/"+*e.keyName) - connection, err := ssh.Dial("tcp", *e.ipAddr+":22", sshConfig) + fmt.Printf("Opening connection to %v:22 with SSHAgent or key %v", ipAddr, "/keys/"+keyName) + connection, err := ssh.Dial("tcp", ipAddr+":22", sshConfig) if err != nil { return fmt.Errorf("Failed to dial: %s", err) } @@ -46,24 +46,24 @@ func startSSH() error { ssh.ECHO: 1, } - fd := os.Stdin.Fd() + fd := int(os.Stdin.Fd()) - if term.IsTerminal(fd) { - oldState, err := term.MakeRaw(fd) + if terminal.IsTerminal(fd) { + oldState, err := terminal.MakeRaw(fd) if err != nil { return err } - defer term.RestoreTerminal(fd, oldState) + defer terminal.Restore(fd, oldState) - winsize, err := term.GetWinsize(fd) + tmpWidth, tmpHeight, err := terminal.GetSize(fd) if err == nil { - width = int(winsize.Width) - height = int(winsize.Height) + width = tmpWidth + height = tmpHeight } } - if err := session.RequestPty("xterm", width, height, modes); err != nil { + if err := session.RequestPty("xterm", height, width, modes); err != nil { session.Close() return fmt.Errorf("request for pseudo terminal failed: %s", err) } @@ -114,15 +114,15 @@ func monitorChanges(session *ssh.Session, fd uintptr) { func termSize(fd uintptr) []byte { size := make([]byte, 16) - winsize, err := term.GetWinsize(fd) + width, height, err := terminal.GetSize(int(fd)) if err != nil { binary.BigEndian.PutUint32(size, uint32(80)) binary.BigEndian.PutUint32(size[4:], uint32(24)) return size } - binary.BigEndian.PutUint32(size, uint32(winsize.Width)) - binary.BigEndian.PutUint32(size[4:], uint32(winsize.Height)) + binary.BigEndian.PutUint32(size, uint32(width)) + binary.BigEndian.PutUint32(size[4:], uint32(height)) return size }