More .NET libraries
- 
                                
                                    
                                
                                Rebex FTP
                                .NET FTP client
 - 
                                
                                    
                                
                                Rebex SSH Shell
                                .NET SSH Shell
 - 
                                
                                    
                                
                                Rebex Total Pack
                                All Rebex .NET libraries together
 
Back to feature list...
Authentication modes
On this page:
Username and password
Password-based authentication is simple:
// connect to a server and verify fingerprint var sftp = new Sftp(); sftp.Connect(hostname); // log in sftp.Login(username, password);
' connect to a server and verify fingerprint Dim sftp As New Rebex.Net.Sftp() sftp.Connect(hostname) ' log in sftp.Login(username, password)
    In addition to password authentication, this method supports simple forms of keyboard-interactive authentication methods as well.
Public/private key authentication
    Asymmetric cryptography makes it possible to authenticate using a private key without revealing it to the server (or anyone else) - only the corresponding
    public key needs to be associated with your account.
    Use SshPrivateKey class for this kind of authentication:
// connect to a server and verify fingerprint
var client = new Sftp();
client.Connect(hostname);
// load the private key
SshPrivateKey privateKey = new SshPrivateKey("my_key.ppk", "key_password");
// log in
client.Login(username, privateKey);
' connect to a server and verify fingerprint
Dim sftp As New Rebex.Net.Sftp()
sftp.Connect(hostname)
' load the private key
Dim privateKey = New SshPrivateKey("my_key.ppk", "key_password")
' log in
sftp.Login(username, privateKey)
How do you get the private key? Usually, you generate it yourself, either using Rebex KeyGenerator sample, our key-generator API or a third-party utility (most SSH/SFTP vendors provide one). Once generated, the corresponding public key has to be associated with your account (this is server-specific, consult your server administrator if needed).
    In case you already have your private key, just load it into the SshPrivateKey object - it supports lot of private key formats.
X.509 certificate authentication
    Some SFTP servers - such as Rebex Buru SFTP Server,
    VanDyke VShell or Tectia SSH Server - support authentication using X.509 certificates.
    Simply load the certificate with an associated private key into the SshPrivateKey object and pass it to the
    Login method.
// connect to a server and verify fingerprint var sftp = new Sftp(); sftp.Connect(hostname, port); // load X.509 certificate Certificate x509 = Rebex.Security.Certificates.Certificate.LoadPfx(certPath, certPassword); // wrap X.509 certificate to SshPrivateKey SshPrivateKey privateKey = new SshPrivateKey(x509); // log in sftp.Login(username, privateKey);
' connect to a server and verify fingerprint Dim sftp As New Rebex.Net.Sftp() sftp.Connect(hostname, port) ' load X.509 certificate Dim x509 = Rebex.Security.Certificates.Certificate.LoadPfx(certPath, certPassword) ' wrap X.509 certificate to SshPrivateKey Dim privateKey = New SshPrivateKey(x509) ' log in sftp.Login(username, privateKey)
X509Certificate2 object as well instead of our Certificate object.
GSSAPI
GSSAPI support makes it possible to use Kerberos or NTLM authentication mechanisms, both in single sign-on mode and username/password(/domain)-based mode.
Note: GSSAPI is only supported on Windows platforms.
Single sign-on
With single sign-on, the current user can authenticate without having to enter his password. Single sign-on is only possible with Kerberos or NTLM authentication mechanisms on servers that support them (through GSSAPI). Additionally, both the client and server machines must be part of the same domain (or a domain trust has to be implemented).
Note: Single sign-on is only supported on Windows platforms.
Kerberos authentication
If the server supports Kerberos authentication, it is possible to use GSSAPI Kerberos v5 authentication mechanism.
Kerberos with single sign-on
// connect to a server and verify fingerprint var sftp = new Sftp(); sftp.Connect(hostname); // initialize GSSAPI for Kerberos single sign-on var credentials = new SshGssApiCredentials(); credentials.SetMechanisms(SshGssApiMechanisms.KerberosV5); // log in using Kerberos single sign-on sftp.Login(credentials);
' connect to a server and verify fingerprint Dim sftp As New Rebex.Net.Sftp() sftp.Connect(hostname) ' initialize GSSAPI for Kerberos single sign-on Dim credentials = New SshGssApiCredentials() credentials.SetMechanisms(SshGssApiMechanisms.KerberosV5) ' log in using Kerberos single sign-on sftp.Login(credentials)
Kerberos with username/password/domain
// connect to a server and verify fingerprint var sftp = new Sftp(); sftp.Connect(hostname); // initialize GSSAPI for Kerberos authentication var credentials = new SshGssApiCredentials(username, password, domain); credentials.SetMechanisms(SshGssApiMechanisms.KerberosV5); // log in using Kerberos sftp.Login(credentials);
' connect to a server and verify fingerprint Dim sftp As New Rebex.Net.Sftp() sftp.Connect(hostname) ' initialize GSSAPI for Kerberos authentication Dim credentials = New SshGssApiCredentials(username, password, domain) credentials.SetMechanisms(SshGssApiMechanisms.KerberosV5) ' log in using Kerberos sftp.Login(credentials)
Note: Kerberos is only supported on Windows platforms. However, it's possible to authenticate Windows-based clients to Unix-based servers using Kerberos.
NTLM authentication
If the server supports NTLM authentication, it is possible to use GSSAPI NTLM authentication mechanism.
NTLM with single sign-on
// connect to a server and verify fingerprint var sftp = new Sftp(); sftp.Connect(hostname); // initialize GSSAPI for NTLM single sign-on var credentials = new SshGssApiCredentials(); credentials.SetMechanisms(SshGssApiMechanisms.Ntlm); // log in using NTLM single sign-on sftp.Login(credentials);
' connect to a server and verify fingerprint Dim sftp As New Rebex.Net.Sftp() sftp.Connect(hostname) ' initialize GSSAPI for NTLM single sign-on Dim credentials = New SshGssApiCredentials() credentials.SetMechanisms(SshGssApiMechanisms.Ntlm) ' log in using NTLM single sign-on sftp.Login(credentials)
NTLM with username/password/domain
// connect to a server and verify fingerprint var sftp = new Sftp(); sftp.Connect(hostname); // initialize GSSAPI for NTLM authentication var credentials = new SshGssApiCredentials(username, password, domain); credentials.SetMechanisms(SshGssApiMechanisms.Ntlm); // log in using NTLM sftp.Login(credentials);
' connect to a server and verify fingerprint Dim sftp As New Rebex.Net.Sftp() sftp.Connect(hostname) ' initialize GSSAPI for NTLM authentication Dim credentials = New SshGssApiCredentials(username, password, domain) credentials.SetMechanisms(SshGssApiMechanisms.Ntlm) ' log in using NTLM single sign-on sftp.Login(credentials)
Note: On non-Windows platforms (Linux, Android, macOS, iOS), NTLM is only available with NTLM plugin.
Advanced keyboard-interactive authentication
    In most cases, password-based authentication will take care
    of servers that use keyboard-interactive authentication method. To handle rare cases where the server utilizes interactive authentication to ask non-trivial questions,
    register an AuthenticationRequest event handler both to get notified about them and to answer them.
    Note: Login method's username and password arguments are optional. If you omit them, the event handler will be called when required.
// connect to a server and verify fingerprint var sftp = new Sftp(); sftp.Connect(hostname); // register AuthenticationRequest event handler sftp.AuthenticationRequest += client_AuthenticationRequest; // log in (alternatively, omit username and password as well) sftp.Login(username, password);
' connect to a server and verify fingerprint Dim sftp As New Rebex.Net.Sftp() sftp.Connect(hostname) ' register AuthenticationRequest event handler AddHandler sftp.AuthenticationRequest, AddressOf client_AuthenticationRequest ' log in (alternatively, omit username and password as well) sftp.Login(username, password)
The event handler implementing the actual logic:
void client_AuthenticationRequest(object sender, SshAuthenticationRequestEventArgs e)
{
    Console.WriteLine("Server: {0}", e.Name);
    Console.WriteLine("Instructions: {0}", e.Instructions);
    foreach (SshAuthenticationRequestItem item in e.Items)
    {
        // display question
        Console.Write(item.Prompt);
        // set answer
        item.Response = Console.ReadLine();
    }
}
Sub client_AuthenticationRequest(ByVal sender As Object, ByVal e As SshAuthenticationRequestEventArgs)
    Console.WriteLine("Server: {0}", e.Name)
    Console.WriteLine("Instructions: {0}", e.Instructions)
    For Each item As SshAuthenticationRequestItem In e.Items
        ' display question
        Console.Write(item.Prompt)
        ' set answer
        item.Response = Console.ReadLine()
    Next
End Sub
Back to feature list...