Browse Source

ssh: added RequestSubsystem().

RequestSubsystem requests the association of a subsystem with the ssh
session on the remote host. A subsystem is a predefined command that
runs in the background when the ssh session is initiated (i.e. sftp).

R=golang-dev, agl
CC=golang-dev, gustav.paul
https://golang.org/cl/6295096
Christine Hansmann 13 years ago
parent
commit
cde552e05f
1 changed files with 23 additions and 0 deletions
  1. 23 0
      ssh/session.go

+ 23 - 0
ssh/session.go

@@ -85,6 +85,14 @@ type setenvRequest struct {
 	Value     string
 }
 
+// RFC 4254 Section 6.5.
+type subsystemRequestMsg struct {
+	PeersId   uint32
+	Request   string
+	WantReply bool
+	Subsystem string
+}
+
 // Setenv sets an environment variable that will be applied to any
 // command executed by Shell or Run.
 func (s *Session) Setenv(name, value string) error {
@@ -136,6 +144,21 @@ func (s *Session) RequestPty(term string, h, w int) error {
 	return s.waitForResponse()
 }
 
+// RequestSubsystem requests the association of a subsystem with the session on the remote host.
+// A subsystem is a predefined command that runs in the background when the ssh session is initiated 
+func (s *Session) RequestSubsystem(subsystem string) error {
+	req := subsystemRequestMsg{
+		PeersId:   s.remoteId,
+		Request:   "subsystem",
+		WantReply: true,
+		Subsystem: subsystem,
+	}
+	if err := s.writePacket(marshal(msgChannelRequest, req)); err != nil {
+		return err
+	}
+	return s.waitForResponse()
+}
+
 // RFC 4254 Section 6.9.
 type signalMsg struct {
 	PeersId   uint32