Skip to content

Instantly share code, notes, and snippets.

@piccaso
Last active December 7, 2022 07:07
Show Gist options
  • Star 60 You must be signed in to star a gist
  • Fork 24 You must be signed in to fork a gist
  • Save piccaso/d963331dcbf20611b094 to your computer and use it in GitHub Desktop.
Save piccaso/d963331dcbf20611b094 to your computer and use it in GitHub Desktop.
ssh.net Example - Keybased Authentication, File Upload, Shell Commands
/*
get SSH.NET (BSD License: http://sshnet.codeplex.com/license)
with NuGet:
>Install-Package SSH.NET -Version 2013.4.7
or just get the dll from here: http://j.mp/sshNet
*/
using System;
using System.Collections.Generic;
using Renci.SshNet; /* reference needed: Renci.SshNet.dll */
class Program
{
static void Main(string[] args){
// Setup Credentials and Server Information
ConnectionInfo ConnNfo = new ConnectionInfo("hostOrIP",22,"username",
new AuthenticationMethod[]{
// Pasword based Authentication
new PasswordAuthenticationMethod("username","password"),
// Key Based Authentication (using keys in OpenSSH Format)
new PrivateKeyAuthenticationMethod("username",new PrivateKeyFile[]{
new PrivateKeyFile(@"..\openssh.key","passphrase")
}),
}
);
// Execute a (SHELL) Command - prepare upload directory
using (var sshclient = new SshClient(ConnNfo)){
sshclient.Connect();
using(var cmd = sshclient.CreateCommand("mkdir -p /tmp/uploadtest && chmod +rw /tmp/uploadtest")){
cmd.Execute();
Console.WriteLine("Command>" + cmd.CommandText);
Console.WriteLine("Return Value = {0}", cmd.ExitStatus);
}
sshclient.Disconnect();
}
// Upload A File
using (var sftp = new SftpClient(ConnNfo)){
string uploadfn = "Renci.SshNet.dll";
sftp.Connect();
sftp.ChangeDirectory("/tmp/uploadtest");
using (var uplfileStream = System.IO.File.OpenRead(uploadfn)){
sftp.UploadFile(uplfileStream, uploadfn, true);
}
sftp.Disconnect();
}
// Execute (SHELL) Commands
using (var sshclient = new SshClient(ConnNfo)){
sshclient.Connect();
// quick way to use ist, but not best practice - SshCommand is not Disposed, ExitStatus not checked...
Console.WriteLine(sshclient.CreateCommand("cd /tmp && ls -lah").Execute());
Console.WriteLine(sshclient.CreateCommand("pwd").Execute());
Console.WriteLine(sshclient.CreateCommand("cd /tmp/uploadtest && ls -lah").Execute());
sshclient.Disconnect();
}
Console.ReadKey();
}
}
@netzulo
Copy link

netzulo commented Sep 26, 2015

wow, really ty for this bro!! im going to use from a webpage ^^

@giang-hai-nguyen
Copy link

is there anyway to download files pro?

@bartread
Copy link

bartread commented Nov 9, 2016

This is great - thanks for posting. Been digging around in the API looking for a way to verify the host key fingerprint but not found anything so far. Is there a way to do this with SSH.NET? Thanks!

@GailBowen
Copy link

Thank you so much - I owe you one.

@mickeyperlstein
Copy link

tnx. great example! KUDOS

@donnyv
Copy link

donnyv commented Aug 12, 2017

You rock!! Thanks!

@appssiddu
Copy link

Many thanks for developing this. I am able to connect in one go.

@vitaliiTolmachov
Copy link

It rocks! thnx for examples

@Sykimnice
Copy link

Thank you. It's great example. :)

@niwsa
Copy link

niwsa commented Aug 1, 2018

Any idea how to provide a option like StrictHostKeyChecking=no to the ssl client?

@hgonzalezv
Copy link

Very helpfull. Thx!

@SaddamBInSyed
Copy link

Any idea how to provide a option like StrictHostKeyChecking=no to the ssl client?

please help

@MWinnGitHub
Copy link

Hi All,
I've been struggling with just running a basic command on a unix host.
Example what I have come up with
`Public Function CreateConnectionInfo() as ConnectionInfo
Dim connNfo as New PasswordConnectionInfo("host", "user", "pw")

Using sshClient = New sshClient(connNfo)
sshClient.Connect()

Using cmd = sshClient.CreateCommand("ls -ltr")
    cmd.Execute()
    MsgBox("command>" & cmd.CommandText)
    MsgBox("Return Value = {0}, cmd.ExitStatus)
End Using

End Using
`
When I check the values being send I never see the PW and the host refuses the connection. I had to have my pw reset about 20 times today..lol

My wish is to use public/private keys instead of a user/pw. Which i have used/created with putty and use it everyday.

Any suggestions would be greatly appreciated.

WannaBe Programmer
MW

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment