package main // small wrapper around sftp server that allows it to be used as a separate process subsystem call by the ssh server. // in practice this will statically link; however this allows unit testing from the sftp client. import ( "flag" "fmt" "io" "io/ioutil" "os" "github.com/pkg/sftp" ) func main() { var ( readOnly bool debugStderr bool debugLevel string options []sftp.ServerOption ) flag.BoolVar(&readOnly, "R", false, "read-only server") flag.BoolVar(&debugStderr, "e", false, "debug to stderr") flag.StringVar(&debugLevel, "l", "none", "debug level (ignored)") flag.Parse() debugStream := ioutil.Discard if debugStderr { debugStream = os.Stderr } options = append(options, sftp.WithDebug(debugStream)) if readOnly { options = append(options, sftp.ReadOnly()) } svr, _ := sftp.NewServer( struct { io.Reader io.WriteCloser }{os.Stdin, os.Stdout, }, options..., ) if err := svr.Serve(); err != nil { fmt.Fprintf(debugStream, "sftp server completed with error: %v", err) os.Exit(1) } }