Documentation ¶
Overview ¶
Package sftpd implements the SSH File Transfer Protocol as described in https://tools.ietf.org/html/draft-ietf-secsh-filexfer-02. It uses pkg/sftp library: https://github.com/pkg/sftp
Index ¶
- func GetDefaultSSHCommands() []string
- func GetSupportedSSHCommands() []string
- type Configuration
- type Connection
- func (c *Connection) Disconnect() error
- func (c *Connection) Filecmd(request *sftp.Request) error
- func (c *Connection) Filelist(request *sftp.Request) (sftp.ListerAt, error)
- func (c *Connection) Fileread(request *sftp.Request) (io.ReaderAt, error)
- func (c *Connection) Filewrite(request *sftp.Request) (io.WriterAt, error)
- func (c *Connection) GetClientVersion() string
- func (c *Connection) GetCommand() string
- func (c *Connection) GetRemoteAddress() string
- func (c *Connection) Lstat(request *sftp.Request) (sftp.ListerAt, error)
- func (c *Connection) OpenFile(request *sftp.Request) (sftp.WriterAtReaderAt, error)
- type Key
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func GetDefaultSSHCommands ¶
func GetDefaultSSHCommands() []string
GetDefaultSSHCommands returns the SSH commands enabled as default
func GetSupportedSSHCommands ¶
func GetSupportedSSHCommands() []string
GetSupportedSSHCommands returns the supported SSH commands
Types ¶
type Configuration ¶
type Configuration struct { // Identification string used by the server Banner string `json:"banner" mapstructure:"banner"` // The port used for serving SFTP requests BindPort int `json:"bind_port" mapstructure:"bind_port"` // The address to listen on. A blank value means listen on all available network interfaces. BindAddress string `json:"bind_address" mapstructure:"bind_address"` // Deprecated: please use the same key in common configuration IdleTimeout int `json:"idle_timeout" mapstructure:"idle_timeout"` // Maximum number of authentication attempts permitted per connection. // If set to a negative number, the number of attempts is unlimited. // If set to zero, the number of attempts are limited to 6. MaxAuthTries int `json:"max_auth_tries" mapstructure:"max_auth_tries"` // Deprecated: please use the same key in common configuration UploadMode int `json:"upload_mode" mapstructure:"upload_mode"` // Actions to execute on file operations and SSH commands Actions common.ProtocolActions `json:"actions" mapstructure:"actions"` // Deprecated: please use HostKeys Keys []Key `json:"keys" mapstructure:"keys"` // HostKeys define the daemon's private host keys. // Each host key can be defined as a path relative to the configuration directory or an absolute one. // If empty or missing, the daemon will search or try to generate "id_rsa" and "id_ecdsa" host keys // inside the configuration directory. HostKeys []string `json:"host_keys" mapstructure:"host_keys"` // KexAlgorithms specifies the available KEX (Key Exchange) algorithms in // preference order. KexAlgorithms []string `json:"kex_algorithms" mapstructure:"kex_algorithms"` // Ciphers specifies the ciphers allowed Ciphers []string `json:"ciphers" mapstructure:"ciphers"` // MACs Specifies the available MAC (message authentication code) algorithms // in preference order MACs []string `json:"macs" mapstructure:"macs"` // TrustedUserCAKeys specifies a list of public keys paths of certificate authorities // that are trusted to sign user certificates for authentication. // The paths can be absolute or relative to the configuration directory TrustedUserCAKeys []string `json:"trusted_user_ca_keys" mapstructure:"trusted_user_ca_keys"` // LoginBannerFile the contents of the specified file, if any, are sent to // the remote user before authentication is allowed. LoginBannerFile string `json:"login_banner_file" mapstructure:"login_banner_file"` // Deprecated: please use the same key in common configuration SetstatMode int `json:"setstat_mode" mapstructure:"setstat_mode"` // List of enabled SSH commands. // We support the following SSH commands: // - "scp". SCP is an experimental feature, we have our own SCP implementation since // we can't rely on scp system command to proper handle permissions, quota and // user's home dir restrictions. // The SCP protocol is quite simple but there is no official docs about it, // so we need more testing and feedbacks before enabling it by default. // We may not handle some borderline cases or have sneaky bugs. // Please do accurate tests yourself before enabling SCP and let us known // if something does not work as expected for your use cases. // SCP between two remote hosts is supported using the `-3` scp option. // - "md5sum", "sha1sum", "sha256sum", "sha384sum", "sha512sum". Useful to check message // digests for uploaded files. These commands are implemented inside SFTPGo so they // work even if the matching system commands are not available, for example on Windows. // - "cd", "pwd". Some mobile SFTP clients does not support the SFTP SSH_FXP_REALPATH and so // they use "cd" and "pwd" SSH commands to get the initial directory. // Currently `cd` do nothing and `pwd` always returns the "/" path. // // The following SSH commands are enabled by default: "md5sum", "sha1sum", "cd", "pwd". // "*" enables all supported SSH commands. EnabledSSHCommands []string `json:"enabled_ssh_commands" mapstructure:"enabled_ssh_commands"` // Absolute path to an external program or an HTTP URL to invoke for keyboard interactive authentication. // Leave empty to disable this authentication mode. KeyboardInteractiveHook string `json:"keyboard_interactive_auth_hook" mapstructure:"keyboard_interactive_auth_hook"` // PasswordAuthentication specifies whether password authentication is allowed. PasswordAuthentication bool `json:"password_authentication" mapstructure:"password_authentication"` // Deprecated: please use the same key in common configuration ProxyProtocol int `json:"proxy_protocol" mapstructure:"proxy_protocol"` // Deprecated: please use the same key in common configuration ProxyAllowed []string `json:"proxy_allowed" mapstructure:"proxy_allowed"` // contains filtered or unexported fields }
Configuration for the SFTP server
func (Configuration) AcceptInboundConnection ¶
func (c Configuration) AcceptInboundConnection(conn net.Conn, config *ssh.ServerConfig)
AcceptInboundConnection handles an inbound connection to the server instance and determines if the request should be served or not.
func (Configuration) Initialize ¶
func (c Configuration) Initialize(configDir string) error
Initialize the SFTP server and add a persistent listener to handle inbound SFTP connections.
type Connection ¶
type Connection struct { *common.BaseConnection // client's version string ClientVersion string // Remote address for this connection RemoteAddr net.Addr // contains filtered or unexported fields }
Connection details for an authenticated user
func (*Connection) Disconnect ¶ added in v1.1.0
func (c *Connection) Disconnect() error
Disconnect disconnects the client closing the network connection
func (*Connection) Filecmd ¶
func (c *Connection) Filecmd(request *sftp.Request) error
Filecmd hander for basic SFTP system calls related to files, but not anything to do with reading or writing to those files.
func (*Connection) Filelist ¶
Filelist is the handler for SFTP filesystem list calls. This will handle calls to list the contents of a directory as well as perform file/folder stat calls.
func (*Connection) Fileread ¶
Fileread creates a reader for a file on the system and returns the reader back.
func (*Connection) GetClientVersion ¶ added in v1.1.0
func (c *Connection) GetClientVersion() string
GetClientVersion returns the connected client's version
func (*Connection) GetCommand ¶ added in v1.1.0
func (c *Connection) GetCommand() string
GetCommand returns the SSH command, if any
func (*Connection) GetRemoteAddress ¶ added in v1.1.0
func (c *Connection) GetRemoteAddress() string
GetRemoteAddress return the connected client's address
func (*Connection) OpenFile ¶ added in v1.1.0
func (c *Connection) OpenFile(request *sftp.Request) (sftp.WriterAtReaderAt, error)
OpenFile implements OpenFileWriter interface