| 
									
										
										
										
											2013-11-06 16:42:50 +08:00
										 |  |  | package sftp_test | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import ( | 
					
						
							| 
									
										
										
										
											2014-09-30 06:43:45 +08:00
										 |  |  | 	"fmt" | 
					
						
							| 
									
										
										
										
											2013-11-06 16:42:50 +08:00
										 |  |  | 	"log" | 
					
						
							| 
									
										
										
										
											2014-09-30 06:43:45 +08:00
										 |  |  | 	"os" | 
					
						
							|  |  |  | 	"os/exec" | 
					
						
							| 
									
										
										
										
											2013-11-06 16:42:50 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-09-07 12:54:42 +08:00
										 |  |  | 	"github.com/pkg/sftp" | 
					
						
							|  |  |  | 	"golang.org/x/crypto/ssh" | 
					
						
							| 
									
										
										
										
											2013-11-06 16:42:50 +08:00
										 |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-23 07:37:25 +08:00
										 |  |  | func Example() { | 
					
						
							|  |  |  | 	var conn *ssh.Client | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-09-30 06:39:25 +08:00
										 |  |  | 	// open an SFTP session over an existing ssh connection.
 | 
					
						
							| 
									
										
										
										
											2013-11-06 16:42:50 +08:00
										 |  |  | 	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) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-11-06 16:48:37 +08:00
										 |  |  | 	// check it's there
 | 
					
						
							| 
									
										
										
										
											2013-11-06 16:42:50 +08:00
										 |  |  | 	fi, err := sftp.Lstat("hello.txt") | 
					
						
							|  |  |  | 	if err != nil { | 
					
						
							|  |  |  | 		log.Fatal(err) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	log.Println(fi) | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2014-09-30 06:43:45 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | func ExampleNewClientPipe() { | 
					
						
							|  |  |  | 	// Connect to a remote host and request the sftp subsystem via the 'ssh'
 | 
					
						
							|  |  |  | 	// command.  This assumes that passwordless login is correctly configured.
 | 
					
						
							|  |  |  | 	cmd := exec.Command("ssh", "example.com", "-s", "sftp") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	// send errors from ssh to stderr
 | 
					
						
							|  |  |  | 	cmd.Stderr = os.Stderr | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	// get stdin and stdout
 | 
					
						
							|  |  |  | 	wr, err := cmd.StdinPipe() | 
					
						
							|  |  |  | 	if err != nil { | 
					
						
							|  |  |  | 		log.Fatal(err) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	rd, err := cmd.StdoutPipe() | 
					
						
							|  |  |  | 	if err != nil { | 
					
						
							|  |  |  | 		log.Fatal(err) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	// start the process
 | 
					
						
							|  |  |  | 	if err := cmd.Start(); err != nil { | 
					
						
							|  |  |  | 		log.Fatal(err) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	defer cmd.Wait() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	// open the SFTP session
 | 
					
						
							|  |  |  | 	client, err := sftp.NewClientPipe(rd, wr) | 
					
						
							|  |  |  | 	if err != nil { | 
					
						
							|  |  |  | 		log.Fatal(err) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	// read a directory
 | 
					
						
							|  |  |  | 	list, err := client.ReadDir("/") | 
					
						
							|  |  |  | 	if err != nil { | 
					
						
							|  |  |  | 		log.Fatal(err) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	// print contents
 | 
					
						
							|  |  |  | 	for _, item := range list { | 
					
						
							|  |  |  | 		fmt.Println(item.Name()) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	// close the connection
 | 
					
						
							|  |  |  | 	client.Close() | 
					
						
							|  |  |  | } |