diff --git a/_example/docker/docker.go b/_example/ssh-docker/docker.go similarity index 98% rename from _example/docker/docker.go rename to _example/ssh-docker/docker.go index 1306965..68df6e3 100644 --- a/_example/docker/docker.go +++ b/_example/ssh-docker/docker.go @@ -74,7 +74,7 @@ func dockerRun(cfg *container.Config, sess ssh.Session) (err error, status int64 go func() { var err error if cfg.Tty { - _, err = io.Copy(sess, stream.Conn) + _, err = io.Copy(sess, stream.Reader) } else { _, err = stdcopy.StdCopy(sess, sess.Stderr(), stream.Reader) } diff --git a/_example/pty/pty.go b/_example/ssh-pty/pty.go similarity index 100% rename from _example/pty/pty.go rename to _example/ssh-pty/pty.go diff --git a/_example/public_key/public_key.go b/_example/ssh-publickey/public_key.go similarity index 100% rename from _example/public_key/public_key.go rename to _example/ssh-publickey/public_key.go diff --git a/_example/simple/simple.go b/_example/ssh-simple/simple.go similarity index 100% rename from _example/simple/simple.go rename to _example/ssh-simple/simple.go diff --git a/session.go b/session.go index 65c8b6a..8228ce1 100644 --- a/session.go +++ b/session.go @@ -65,9 +65,16 @@ type session struct { func (sess *session) Write(p []byte) (n int, err error) { if sess.pty != nil { - // normalize \n to \r\n when pty is accepted + m := len(p) + // normalize \n to \r\n when pty is accepted. + // this is a hardcoded shortcut since we don't support terminal modes. p = bytes.Replace(p, []byte{'\n'}, []byte{'\r', '\n'}, -1) p = bytes.Replace(p, []byte{'\r', '\r', '\n'}, []byte{'\r', '\n'}, -1) + n, err = sess.Channel.Write(p) + if n > m { + n = m + } + return } return sess.Channel.Write(p) }