func Example(conn *ssh.ClientConn) { // open an SFTP sesison over an existing ssh connection. sftp, err := sftp.NewClient(conn) if err != nil { log.Fatal(err) } defer sftp.Close() // walk a directory w := sftp.Walk("/home/user") for w.Step() { if w.Err() != nil { continue } log.Println(w.Path()) } // leave your mark f, err := sftp.Create("hello.txt") if err != nil { log.Fatal(err) } if _, err := f.Write([]byte("Hello world!")); err != nil { log.Fatal(err) } // check it's there fi, err := sftp.Lstat("hello.txt") if err != nil { log.Fatal(err) } log.Println(fi) }
func (i *blueBoxInstance) UploadScript(ctx gocontext.Context, script []byte) error { client, err := i.sshClient(ctx) if err != nil { return err } defer client.Close() sftp, err := sftp.NewClient(client) if err != nil { return err } defer sftp.Close() _, err = sftp.Lstat("build.sh") if err == nil { return ErrStaleVM } f, err := sftp.Create("build.sh") if err != nil { return err } _, err = f.Write(script) if err != nil { return err } return err }
func (c *sshClientImpl) UploadFile(username string, password string, ip string, srcFile string, destFile string) error { config := &myssh.ClientConfig{ User: username, Auth: []myssh.AuthMethod{ myssh.Password(password), }, } if !IsIP(ip) { return errors.New("invalid IP address") } if IsDir(srcFile) || IsDir(destFile) { return errors.New("Is a directory") } client, err := myssh.Dial("tcp", ip+":22", config) if err != nil { log.Fatal(err) return err } defer client.Close() sftp, err := sftp.NewClient(client) if err != nil { log.Fatal(err) return err } defer sftp.Close() data, err := ioutil.ReadFile(srcFile) if err != nil { log.Fatal(err) return err } f, err := sftp.Create(destFile) if err != nil { log.Fatal(err) return err } defer f.Close() _, err = f.Write([]byte(data)) if err != nil { log.Fatal(err) return err } _, err = sftp.Lstat(destFile) if err != nil { log.Fatal(err) return err } return nil }
func main() { if err := resolveSettings(pars); err != nil { log.Fatal(err) } conn, err := initSSH(pars) if err != nil { log.Fatal(err) } sftp, err := sftp.NewClient(conn) if err != nil { log.Fatal(err) } defer sftp.Close() finStat, err := os.Stat(inPath) if err != nil { log.Fatal(err) } origSize := finStat.Size() fin, err := os.Open(inPath) if err != nil { log.Fatal(err) } defer fin.Close() outPath := path.Clean(path.Join(pars.DstFolder, filepath.Base(inPath))) fout, err := sftp.Create(outPath) if err != nil { log.Fatal(err) } if _, err := io.Copy(fout, fin); err != nil { log.Fatal(err) } foutStat, err := sftp.Lstat(outPath) if err != nil { log.Fatal(err) } if finalSize := foutStat.Size(); origSize != finalSize { if err := sftp.Remove(outPath); err != nil { log.Printf("[ERROR] Unable to remove target file: %v", err) } log.Fatalf("Failed to upload %s to %s: expected %d bytes, got %d (missing %d)", inPath, outPath, origSize, finalSize, origSize-finalSize) } fmt.Println("Successfully uploaded", outPath) }
func (i *jupiterBrainInstance) UploadScript(ctx context.Context, script []byte) error { client, err := i.sshClient() if err != nil { return err } defer client.Close() sftp, err := sftp.NewClient(client) if err != nil { return err } defer sftp.Close() _, err = sftp.Lstat("build.sh") if err == nil { return ErrStaleVM } f, err := sftp.Create("build.sh") if err != nil { return err } _, err = f.Write(script) if err != nil { return err } f, err = sftp.Create("wrapper.sh") if err != nil { return err } _, err = fmt.Fprintf(f, wrapperSh) return err }