edtFTPnet/PRO - Secure FTP component for .NET | Free Trial | Pricing
Click or drag to resize

SSHSCPClient Class

Provides low-level access to SCP functionality.
Inheritance Hierarchy

Namespace:  EnterpriseDT.Net.Ftp.Ssh
Assembly:  edtFTPnetPRO (in edtFTPnetPRO.dll) Version: 12.3.0.0
Syntax
public class SSHSCPClient : IExFileTransferClient, 
	IFileTransferClient

The SSHSCPClient type exposes the following members.

Constructors
  NameDescription
Public methodSSHSCPClient
Default constructor.
Top
Properties
  NameDescription
Public propertyAuthenticationMethod
Get or set the current authentication method being used.
Public propertyClientPrivateKeyBytes
Public propertyClientPrivateKeyFile
Path of the private key file used to authenticate the client
Public propertyClientPrivateKeyPassphrase
Passphrase of the private key file.
Public propertyCloseStreamsAfterTransfer
If true then streams are closed after a transfer has completed.
Public propertyControlPort
The port on the server to which to connect the control-channel.
Public propertyDeleteOnFailure
Controls whether or not a file is deleted when a failure occurs.
Public propertyDetectTransferMode
If set to true, the transfer mode in operations involving multiple files is automatically changed between ASCII and binary as appropriate.
Public propertyIsConnected
Indicates whether the client is currently connected with the server.
Public propertyIsResuming
Returns true if the next transfer is to be resumed (i.e. Resume has been called).
Public propertyKBIPrompts
Array of prompts used for keyboard interactive (KBI) authentication.
Public propertyKnownHosts
Manager of the list of known hosts used to authenticate the server.
Public propertyLastBytesTransferred
The number of bytes transferred in the last transfer operation.
Public propertyLastFileTransferred
The remote name/path of the last file transferred.
Public propertyLicenseKey
The license key string.
Public propertyLicenseOwner
The license owner string.
Public propertyLogTag
Log tag
Public propertyMaxPacketSize
The SSH maximum packet size.
Public propertyMaxTransferRate
The maximum transfer rate in bytes per sec
Public propertyPassword
Password of account on the server or the passphrase of the private key file.
Public propertyPreferredCipherAlgorithms
Preferred algorithm(s) to use for encryption.
Public propertyPreferredCompressionAlgorithms
Preferred algorithm(s) to use for data compression
Public propertyPreferredHostKeyAlgorithms
Preferred algorithm(s) to use for server authentication via public key
Public propertyPreferredKeyExchangeMethods
Preferred methods to use for key exchange.
Public propertyPreferredMACAlgorithms
Preferred MAC algorithm(s)
Public propertyProxySettings
Settings for using proxies.
Public propertyRemoteHost
The domain-name or IP address of the SFTP server.
Public propertyRetryAuth
By default, authentication is retried automatically using a different method if it fails.
Public propertySendInitialWindowAdjust
Determines whether a SSH_MSG_CHANNEL_WINDOW_ADJUST message should be sent initially (true by default).
Public propertyServerCompatibility
Controls various server compatibility features.
Public propertyServerValidation
Controls the way in which remote servers are validated.
Public propertyShowHiddenFiles
Include hidden files in operations that involve listing of directories, and if supported by the server. Not supported in SFTP.
Public propertyTCPBufferSize
The size of the TCP read and write buffers. The default value means the Microsoft defaults are used.
Public propertyTimeout
Overall timeout in milliseconds for waiting for messages and underlying timeouts on sockets.
Public propertyTransferBufferSize
The size of the buffers (in bytes) used in writing to and reading from the data-sockets.
Public propertyTransferNotifyInterval
The number of bytes transferred between each notification of the BytesTransferred event.
Public propertyTransferNotifyListings
By default the BytesTransferred event is not triggered during directory listings - this property can be used to enable this behaviour.
Public propertyTransferType
The current file transfer type (BINARY or ASCII).
Public propertyUserName
User-name of account on the server.
Public propertyWelcomeMessage
Server's banner.
Public propertyWindowSize
The SSH window size.
Top
Methods
  NameDescription
Public methodCancelResume
Cancel the resume. Use this method if something goes wrong and the server is left in an inconsistent state. Not used in SCP as resume is not supported
Public methodCancelTransfer
Cancels the current transfer.
Public methodCdUp
Change the remote working directory to parent
Public methodChDir
Change the remote working directory
Protected methodCheckConnection
Checks if the client has connected to the server and throws an exception if it hasn't. This is only intended to be used by subclasses
Protected methodCheckTimeout
Check to see if the timeout has expired
Protected methodCloseSocket
Public methodConnect
Establish a connection to the SFTP server
Public methodDelete
Delete the specified remote file.
Public methodDir
List current directory's contents as an array of strings of filenames.
Public methodDir(String)
List a directory's contents as an array of strings of filenames.
Public methodDir(String, Boolean)
List a directory's contents as an array of strings.
Public methodDirDetails
List the current directory's contents as an array of FTPFile objects.
Public methodDirDetails(String)
List a directory's contents as an array of FTPFile objects.
Public methodDirDetails(String, FTPFileCallback)
Public methodDirDetails(String, Boolean)
Returns the given directory's contents and optionally that of its subdirectories as an array of FTPFile objects.
Public methodEquals
Determines whether the specified object is equal to the current object.
(Inherited from Object.)
Public methodExecuteCommand
Public methodExists
Checks for the existence of a file on the server.
Protected methodFinalize
Allows an object to try to free resources and perform other cleanup operations before it is reclaimed by garbage collection.
(Inherited from Object.)
Public methodGet(String)
Get data from the SFTP server.
Public methodGet(Stream, String)
Get data from the server
Public methodGet(String, String)
Get data from the SFTP server using the currently set transfer mode.
Public methodGetHashCode
Serves as the default hash function.
(Inherited from Object.)
Public methodGetLocalCRC
Get the CRC-32 checksum for the named local file
Public methodGetRemoteCRC
Get the CRC-32 checksum for the named remote file. Not supported in SFTP.
Public methodGetType
Gets the Type of the current instance.
(Inherited from Object.)
Protected methodMemberwiseClone
Creates a shallow copy of the current Object.
(Inherited from Object.)
Public methodMkDir
Create the specified remote working directory.
Public methodModTime
Get modification time for a remote file.
Public methodMultipleDelete(FileFilter)
Delete multiple files in the current remote directory
Public methodMultipleDelete(String)
Delete multiple files in the current remote directory
Public methodMultipleDelete(String, FileFilter, Boolean)
Delete multiple files in the current remote directory and its subdirectories.
Public methodMultipleDelete(String, String, Boolean)
Delete multiple files in the current remote directory and its subdirectories.
Public methodMultipleDeleteDirectories
Remove a remote directory, and all its files and its subdirectories
Public methodMultipleGet(String, FileFilter)
Get multiple files into the specified local directory from the current remote directory
Public methodMultipleGet(String, String)
Get multiple files into the specified local directory from the current remote directory
Public methodMultipleGet(String, String, FileFilter, Boolean)
Get multiple files from the specified remote directory into the specified local directory
Public methodMultipleGet(String, String, String, Boolean)
Get multiple files from the specified remote directory into the specified local directory
Public methodMultiplePut(String, FileFilter)
Put multiple files from the specified local directory into the current remote directory
Public methodMultiplePut(String, String)
Put multiple files from the specified local directory into the current remote directory
Public methodMultiplePut(String, String, FileFilter, Boolean)
Put multiple files from the specified local directory into the specified remote directory
Public methodMultiplePut(String, String, String, Boolean)
Put multiple files from the specified local directory into the specified remote directory
Protected methodOnBytesTransferred
Protected methodOnCommandSent
Protected methodOnReplyReceived
Protected methodOnTransferCancelled
Protected methodOnTransferCompleteEx
Protected methodOnTransferStartedEx
Public methodPut(Byte, String)
Put data onto the server
Public methodPut(Stream, String)
Put a stream of data onto the FTP server in the current directory.
Public methodPut(String, String)
Put a local file onto the SFTP server in the current directory.
Public methodPut(Byte, String, Boolean)
Put data onto the SFTP server in the current directory. Allows appending if current file exists.
Public methodPut(Stream, String, Boolean)
Put a stream of data onto the FTP server in the current directory. Allows appending if current file exists
Public methodPut(String, String, Boolean)
Upload a local file to the server
Public methodPwd
Get the current remote working directory
Public methodQuit
Quit the session
Public methodQuitImmediately
Quit the session immediately. Just close the socket. Don't send any messages to the server.
Public methodRename
Rename a remote file
Public methodResume
Make the next file transfer (put or get) resume.
Public methodResumeDownload
Make the next download resume at a specific point.
Public methodRmDir
Remove a directory
Public methodSetModTime
Set modification time for a remote file.
Public methodSize
Get the size of a remote file.
Public methodTestConnection
Tests the connection
Public methodToString
Returns a string that represents the current object.
(Inherited from Object.)
Public methodUnlock
Unlock the software for use. This method should be used when a configuration file isn't available
Top
Events
  NameDescription
Public eventBytesTransferred
Event triggered every time TransferNotifyInterval bytes transferred.
Public eventCommandSent
Triggered every time a command is sent to the server.
Public eventReplyReceived
Triggered every time a logical reply is received from the server. In SFTP this will NOT be triggered for every packet that arrives.
Public eventTransferCancelled
Notifies of the cancellation of a transfer
Public eventTransferCompleteEx
Notifies of the completion of a transfer
Public eventTransferStartedEx
Notifies of the start of a transfer
Public eventValidatingServer
Notifies that the server must be validated
Top
Fields
  NameDescription
Protected field_proxySettings
Proxy settings
Protected fieldcancelTransfer
Can be used to cancel a transfer
Protected fieldcloseStreamsAfterTransfer
If true then streams are closed after a transfer has completed.
Protected fieldcompatFlags
Configuration flags for non-compliant servers
Protected fieldcompressionAlg
Compression algorithms
Protected fieldcontrolPort
Protected fieldcwd
Current remote working directory
Protected fieldStatic memberDEFAULT_BUFFER_SIZE
Transfer buffer size
Protected fieldStatic memberDEFAULT_MONITOR_INTERVAL
Default byte interval for transfer monitor
Protected fieldStatic memberDEFAULT_TIMEOUT
Default timeout for waiting for a server reply
Protected fielddeleteOnFailure
If a download to a file fails, delete the partial file
Protected fielddetectTransferMode
Do we detect transfer mode when transferring files?
Protected fieldkey
License key
Protected fieldknownHostsManager
Manages the list of known hosts
Protected fieldlastBytesTransferred
Holds the number of bytes transferred in that most recent transfer.
Protected fieldlastFileTransferred
Name of the last file transferred.
Protected fieldlogTag
Logging tag
Protected fieldmonitorInterval
Bytes transferred in between monitor callbacks
Protected fieldowner
License owner
Protected fieldprompts
List of authorization prompts
Protected fieldremoteHost
Remote host we are connecting to
Protected fieldremoteIPAddress
IP address of remote host in string form
Protected fieldresume
If true, a file transfer is being resumed
Protected fieldserverValidation
Determines how the remote host is validated
Protected fieldsocket
Protected fieldsocks
SOCKS settings
Protected fieldtcpBufferSize
The TCP read and write buffer sizes
Protected fieldthrottler
Threshold for throttling
Protected fieldtimeout
Timeout in milliseconds
Protected fieldtransferBufferSize
Size of transfer buffers
Protected fieldtransferNotifyListings
Should BytesTransferred event be triggered in directory listings?
Protected fieldtransferType
Record of the transfer type - make the default BINARY
Top
Remarks

SSHSCPClient supports SOCKS (4, 4A, and 5) and SFTP.

SSHSCPClient supports SFTP, which stands for SSH File Transfer Protocol. Essentially, it is file transfer over an SSH connection, hence it has the security of SSH. SFTP is only superficially related to FTP and FTPS. It achieves the same goals of file transfer and related operations, but the underlying protocol is entirely different.

Examples
This example shows a simple SFTP session.
// create an SCP client
SSHSCPClient ftp = new SSHSCPClient();
ftp.RemoteHost = "192.168.10.123";

// Turn off server validation (ONLY do this when testing)
ftp.ServerValidation = SecureFTPServerValidationType.None;

// set up the credentials for password authentication (the default)
ftp.UserName = "myuser";
ftp.Password = "mypassword";

// connect to the server
ftp.Connect();                        

// get a file
ftp.Get("file.txt", "file.txt");

// close the connection
ftp.Quit();

This example uses password authentication and does not attempt to verify the server (which should always be done in production systems).

Server Validation: The examples above used no server validation. This is only normally acceptable only when testing. To be secure applications should always validate the server that they're communicating with. If the ServerValidation property is set to SecureFTPServerValidationType.Automatic or SecureFTPServerValidationType.AutomaticIgnoreHostName then SSHSCPClient will attempt to validate the server's public key upon connection.

Public keys are managed by the KnownHostsManager, available in the KnownHosts property. There are two ways that the client can load server public keys - via the known_hosts file or by explicitly loading a public key from a file.

  1. Known_hosts - Many SSH implementations use a file called known_hosts which is loaded by clients to validate servers. Typically, this file is generated when the client first connects to a server - a prompt asks if the server should be added to the list of known hosts. The known_hosts file contains a list of approved servers and their public keys. The KnownHostsManager has a property called KnownHostsFile. The path of the known_hosts file should be assigned to this property to load the known hosts in that file.
  2. Public key files - Server public keys can also be maintained in their own key file and be used for server validation without adding them to the known_hosts file. The KnownHostsManager supports explicitly adding server public keys via the AddKnownHost(String, String) method. This requires the hostname and the public key file. SSH public key files have two standard formats - OpenSSH and SECSH. Both these public key formats are supported.

Client Validation: Client authentication can be either by password, by public/private keys, or by keyboard- interactive authentication. The default is password authentication. The current authentication method can be found (and set) from the AuthenticationMethod property.

  1. Password authentication - In password authentication, the UserName and Password properties must be set, along with the ServerAddress. The user name and password should be that of the SSH user that the client is logging in as. Note that some SFTP servers are set up to disallow password authentication, in which case the connection attempt will fail unless password authentication is enabled in the server configuration file.
  2. Public key authentication - In public key authentication, SSH clients and servers authenticate each other via public/private key pairs. Each must have access to their own private key, and they must have access to each other's public key. The client's public key must be registered with the SSH server, typically by copying it into the server's authorized_keys file. The client's private key is loaded via the ClientPrivateKeyFile property. Both DSA and RSA keypairs can be used. The UserName and Password properties must be set, along with the RemoteHost. Here the password is the passphrase of the private key file. The AuthenticationMethod property must also be set to PublicKey. There are no formal standards for SSH private key files, however two main formats are in common use - ssh.com and OpenSSH. Both are supported.
  3. Keyboard-interactive authentication - Keyboard-interactive (KBI) authentication is the most recently introduced form of authentication for SSH. It involves the server sending prompts to the client, which the client must respond to correctly to be authenticated. Its purpose is permit the client to support a variety of authentication mechanisms without knowing anything about them. This implementation of KBI authentication relies on the programmer knowing the prompts in advance. The prompts are easily determined by connecting to the server via a command-line ssh client, using KBI. when the server sends its list of prompts that require responses, the client searches the list of loaded SSHAuthPrompts for each prompt. It then sends the set responses back to the server. If the expected responses are supplied, the authentication succeeds. If the prompt is for a user's password, it will typically be something like "Password:". The SSHPasswordPrompt class is supplied to make it easier to set up a password prompt. To set up the prompts, an array of SSHAuthPrompts is assigned to the KBIPrompts property. Note that to use KBI, the AuthenticationMethod property must also be set to KeyboardInteractive.

Server Compatibility: Generally, this class should work with most SCP servers. Some servers return an error saying the file does not exist after creating it. By default, the client does a permission change after creating the file, which is done to ensure the file permissions are correct. If this error is encountered, try setting the ServerCompatibility property to SSHDisableChmodAfterPut to try to eliminate the problem.

Public key algorithms: Either DSA or RSA or both can be set for the preferred public key algorithms for server authentication. If, for example, RSA is set, the server will present an RSA public key to the client (if the server supports RSA keys of course - some servers do not). The PreferredHostKeyAlgorithms property is a bitwise flag and can be set to combinations of the SSHPublicKeyAlgorithm enum values by OR'ing them together. The default is all algorithms enabled.

Cipher algorithms: The cipher algorithms are the symmetric algorithms used to perform the encryption of the SFTP data and commands. The PreferredCipherAlgorithms property is a bitwise flag and can be set to combinations of the SSHCipherAlgorithm enum values by OR'ing them together. The default is all algorithms enabled.

SOCKS: SOCKS may be used for FTPing through firewalls. For this to be possible a SOCKS proxy must be available, and a user account must be set up on that proxy. SSLFTPClient supports all the popular versions of SOCKS - 4, 4A, and 5.

The SOCKS features are controlled entirely through the SocksContext property. If it is null (the default) then SOCKS is not used. To use SOCKS, the property must be set to an instance of Socks4Context or Socks5Context. For example, for SOCKS4:

mySCPClient.SocksContext = new Socks4Context("192.168.0.2", 1080, "marvin23");
and for SOCKS5:
Socks5Context socksContext = new Socks5Context("192.168.0.2", 1080);
socksContext.AuthMethods.Add(new Socks5NoAuthMethod());
socksContext.AuthMethods.Add(new Socks5UserNamePasswordAuthMethod("marvin23", "m31erk"));
mySCPClient.SocksContext = socksContext;
See Also