github.com/pkg/sftp@v1.13.6/examples/buffered-read-benchmark/main.go (about) 1 // buffered-read-benchmark benchmarks the peformance of reading 2 // from /dev/zero on the server to a []byte on the client via io.Copy. 3 package main 4 5 import ( 6 "flag" 7 "fmt" 8 "io" 9 "log" 10 "net" 11 "os" 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 r, err := c.Open("/dev/zero") 61 if err != nil { 62 log.Fatal(err) 63 } 64 defer r.Close() 65 66 const size = 1e9 67 68 log.Printf("reading %v bytes", size) 69 t1 := time.Now() 70 n, err := io.ReadFull(r, make([]byte, size)) 71 if err != nil { 72 log.Fatal(err) 73 } 74 if n != size { 75 log.Fatalf("copy: expected %v bytes, got %d", size, n) 76 } 77 log.Printf("read %v bytes in %s", size, time.Since(t1)) 78 }