github.com/pkg/sftp@v1.13.6/examples/buffered-write-benchmark/main.go (about) 1 // buffered-write-benchmark benchmarks the peformance of writing 2 // a single large []byte on the client to /dev/null on the server via io.Copy. 3 package main 4 5 import ( 6 "flag" 7 "fmt" 8 "log" 9 "net" 10 "os" 11 "syscall" 12 "time" 13 14 "golang.org/x/crypto/ssh" 15 "golang.org/x/crypto/ssh/agent" 16 17 "github.com/pkg/sftp" 18 ) 19 20 var ( 21 USER = flag.String("user", os.Getenv("USER"), "ssh username") 22 HOST = flag.String("host", "localhost", "ssh server hostname") 23 PORT = flag.Int("port", 22, "ssh server port") 24 PASS = flag.String("pass", os.Getenv("SOCKSIE_SSH_PASSWORD"), "ssh password") 25 SIZE = flag.Int("s", 1<<15, "set max packet size") 26 ) 27 28 func init() { 29 flag.Parse() 30 } 31 32 func main() { 33 var auths []ssh.AuthMethod 34 if aconn, err := net.Dial("unix", os.Getenv("SSH_AUTH_SOCK")); err == nil { 35 auths = append(auths, ssh.PublicKeysCallback(agent.NewClient(aconn).Signers)) 36 37 } 38 if *PASS != "" { 39 auths = append(auths, ssh.Password(*PASS)) 40 } 41 42 config := ssh.ClientConfig{ 43 User: *USER, 44 Auth: auths, 45 HostKeyCallback: ssh.InsecureIgnoreHostKey(), 46 } 47 addr := fmt.Sprintf("%s:%d", *HOST, *PORT) 48 conn, err := ssh.Dial("tcp", addr, &config) 49 if err != nil { 50 log.Fatalf("unable to connect to [%s]: %v", addr, err) 51 } 52 defer conn.Close() 53 54 c, err := sftp.NewClient(conn, sftp.MaxPacket(*SIZE)) 55 if err != nil { 56 log.Fatalf("unable to start sftp subsytem: %v", err) 57 } 58 defer c.Close() 59 60 w, err := c.OpenFile("/dev/null", syscall.O_WRONLY) 61 if err != nil { 62 log.Fatal(err) 63 } 64 defer w.Close() 65 66 f, err := os.Open("/dev/zero") 67 if err != nil { 68 log.Fatal(err) 69 } 70 defer f.Close() 71 72 const size = 1e9 73 74 log.Printf("writing %v bytes", size) 75 t1 := time.Now() 76 n, err := w.Write(make([]byte, size)) 77 if err != nil { 78 log.Fatal(err) 79 } 80 if n != size { 81 log.Fatalf("copy: expected %v bytes, got %d", size, n) 82 } 83 log.Printf("wrote %v bytes in %s", size, time.Since(t1)) 84 }