More .NET libraries
-
Rebex FTP/SSL
.NET FTP client
-
Rebex SSH Shell
.NET SSH Shell
-
Rebex Total Pack
All Rebex .NET libraries together
Back to feature list...
Connecting
On this page:
Connecting to SFTP/SSH servers
To connect to an SFTP server running on default port 22, use Connect
method. Once connected, don't forget to
check the server's fingerprint
as a security measure.
SFTP is a file transfer protocol that runs over an SSH protocol session. Most modern SSH servers support SFTP.
// create SFTP client instance var sftp = new Rebex.Net.Sftp(); // connect to a server sftp.Connect(hostname); // check sftp.Fingerprint here
' create SFTP client instance Dim sftp = New Rebex.Net.Sftp ' connect to a server sftp.Connect(hostname) ' check sftp.Fingerprint here
To connect to a server running on non-standard port, just pass the port number to the Connect
method as an additional argument.
Setting connection options
Various connection options are available through Sftp.Settings
object. Set these before connecting to a server if needed.
For information about proxy servers, see Proxies and custom sockets.
// create SFTP client instance var sftp = new Rebex.Net.Sftp(); // use POSIX-style rename operation if available sftp.Settings.UsePosixRename = true; // only allow specific algorithms sftp.Settings.SshParameters.HostKeyAlgorithms = SshHostKeyAlgorithm.RSA; sftp.Settings.SshParameters.EncryptionAlgorithms = SshEncryptionAlgorithm.AES; // enable ZLIB compression sftp.Settings.SshParameters.Compression = true; // connect to a server sftp.Connect(hostname);
' create SFTP client instance Dim sftp = New Rebex.Net.Sftp ' use POSIX-style rename operation if available sftp.Settings.UsePosixRename = True ' only allow specific algorithms sftp.Settings.SshParameters.HostKeyAlgorithms = SshHostKeyAlgorithm.RSA sftp.Settings.SshParameters.EncryptionAlgorithms = SshEncryptionAlgorithm.AES ' enable ZLIB compression sftp.Settings.SshParameters.Compression = True ' connect to a server sftp.Connect(hostname)
Getting info about existing connection
Once connected (or authenticated), you can get useful information about the current session such as server/user name, server fingerprint, negotiated algorithms or SFTP protocol version. Don't be afraid - user's password or private key are not stored with the session.
Sftp.Session
object's properties.
// create SFTP client instance var sftp = new Rebex.Net.Sftp(); // connect to a server sftp.Connect(hostname); // display info Console.WriteLine("Connected to {0}:{1}", sftp.ServerName, sftp.ServerPort); Console.WriteLine("Server: {0}", sftp.Session.ServerIdentification); Console.WriteLine("Server host key: {0} ({1}-bit), Fingerprint: {2}", sftp.ServerKey.KeyAlgorithm, sftp.ServerKey.KeySize, sftp.ServerKey.Fingerprint); // verify fingerprint // ... // authenticate sftp.Login(username, password); // display info to the user Console.WriteLine("Logged on as {0} (Protocol version: {1}).", sftp.UserName, sftp.ProtocolVersion);
' create SFTP client instance Dim sftp = New Rebex.Net.Sftp() ' connect to a server sftp.Connect(hostname) ' display info Console.WriteLine("Connected to {0}:{1}", sftp.ServerName, sftp.ServerPort) Console.WriteLine("Server: {0}", sftp.Session.ServerIdentification) Console.WriteLine("Server host key: {0} ({1}-bit), Fingerprint: {2}", sftp.ServerKey.KeyAlgorithm, sftp.ServerKey.KeySize, sftp.ServerKey.Fingerprint) ' verify fingerprint ' ... ' authenticate sftp.Login(username, password) ' display info to the user Console.WriteLine("Logged on as {0} (Protocol version: {1}).", sftp.UserName, sftp.ProtocolVersion)
Reusing SSH connection in multiple SFTP/SCP/SSH sessions
SSH makes it possible to
share one connection between multiple protocol sessions.
Once you have a connected and authenticated an Sftp
object, you can bind additional Sftp
or Scp
objects to its
underlying SshSession
using the Bind
method.
This will spawn multiple SFTP or SCP sessions, all using a single underlying SSH connection.
// connect using the first SFTP client Sftp sftp1 = new Rebex.Net.Sftp(); sftp1.Connect(hostname); sftp1.Login(username, password); // bind second SFTP client to the session Sftp sftp2 = new Sftp(); sftp2.Bind(sftp1.Session); // transfer files using both clients sftp1.PutFile(@"C:\MyData\file1.txt", "file1.txt"); sftp2.PutFile(@"C:\MyData\file2.txt", "file2.txt");
' connect using the first SFTP client Dim sftp1 = New Rebex.Net.Sftp() sftp1.Connect(hostname) sftp1.Login(username, password) ' bind second SFTP client to the session Dim sftp2 = New Sftp() sftp2.Bind(sftp1.Session) ' transfer files using both clients sftp1.PutFile("C:\MyData\file1.txt", "file1.txt") sftp2.PutFile("C:\MyData\file2.txt", "file2.txt")
You can even use one of the underlying SshSession
object's methods to
execute remote commands (if allowed by the server).
Please note that it's not necessary to spawn multiple SFTP sessions to be able to transfer multiple
files simultaneously - even a single Sftp
object can do that.
Checking connection state
To check whether a session is still alive, use GetConnectionState
method.
This will send a simple "read-only" command to the server to ensure the connection is still up and running.
// check connection state if (!sftp.IsConnected) { // notify the user and return return; }
' check connection state If Not sftp.IsConnected Then ' notify the user and return Return End If
Back to feature list...