diff --git a/agent/agent.go b/agent/agent.go index 3bdc46bf64e04..d596511dd1522 100644 --- a/agent/agent.go +++ b/agent/agent.go @@ -467,6 +467,7 @@ func (a *agent) handleSSHSession(session ssh.Session) error { } go func() { _, _ = io.Copy(stdinPipe, session) + _ = stdinPipe.Close() }() err = cmd.Start() if err != nil { diff --git a/agent/agent_test.go b/agent/agent_test.go index 612aa93b17034..22ee920c2c8f7 100644 --- a/agent/agent_test.go +++ b/agent/agent_test.go @@ -16,6 +16,7 @@ import ( "testing" "time" + scp "github.com/bramvdbogaerde/go-scp" "github.com/google/uuid" "github.com/pion/udp" "github.com/pion/webrtc/v3" @@ -149,6 +150,20 @@ func TestAgent(t *testing.T) { require.NoError(t, err) }) + t.Run("SCP", func(t *testing.T) { + t.Parallel() + sshClient, err := setupAgent(t, agent.Metadata{}, 0).SSHClient() + require.NoError(t, err) + scpClient, err := scp.NewClientBySSH(sshClient) + require.NoError(t, err) + tempFile := filepath.Join(t.TempDir(), "scp") + content := "hello world" + err = scpClient.CopyFile(context.Background(), strings.NewReader(content), tempFile, "0755") + require.NoError(t, err) + _, err = os.Stat(tempFile) + require.NoError(t, err) + }) + t.Run("EnvironmentVariables", func(t *testing.T) { t.Parallel() key := "EXAMPLE" diff --git a/go.mod b/go.mod index 2580ad1b52f8b..56170ddd99a20 100644 --- a/go.mod +++ b/go.mod @@ -49,6 +49,7 @@ require ( github.com/armon/circbuf v0.0.0-20190214190532-5111143e8da2 github.com/awalterschulze/gographviz v2.0.3+incompatible github.com/bgentry/speakeasy v0.1.0 + github.com/bramvdbogaerde/go-scp v1.2.0 github.com/briandowns/spinner v1.18.1 github.com/charmbracelet/charm v0.12.1 github.com/charmbracelet/lipgloss v0.5.0 diff --git a/go.sum b/go.sum index efee42aec96ea..214ca98269e8f 100644 --- a/go.sum +++ b/go.sum @@ -270,6 +270,8 @@ github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869/go.mod h1:Ekp36dR github.com/bombsimon/wsl/v3 v3.3.0/go.mod h1:st10JtZYLE4D5sC7b8xV4zTKZwAQjCH/Hy2Pm1FNZIc= github.com/bool64/shared v0.1.4 h1:zwtb1dl2QzDa9TJOq2jzDTdb5IPf9XlxTGKN8cySWT0= github.com/boombuler/barcode v1.0.0/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8= +github.com/bramvdbogaerde/go-scp v1.2.0 h1:mNF1lCXQ6jQcxCBBuc2g/CQwVy/4QONaoD5Aqg9r+Zg= +github.com/bramvdbogaerde/go-scp v1.2.0/go.mod h1:s4ZldBoRAOgUg8IrRP2Urmq5qqd2yPXQTPshACY8vQ0= github.com/breml/bidichk v0.1.1/go.mod h1:zbfeitpevDUGI7V91Uzzuwrn4Vls8MoBMrwtt78jmso= github.com/bshuster-repo/logrus-logstash-hook v0.4.1/go.mod h1:zsTqEiSzDgAa/8GZR7E1qaXrhYNDKBYy5/dWPTIflbk= github.com/bshuster-repo/logrus-logstash-hook v1.0.0/go.mod h1:zsTqEiSzDgAa/8GZR7E1qaXrhYNDKBYy5/dWPTIflbk=